python - 在列表的开头和结尾强制执行项目
问题描述
我怎样才能修改这个列表,让所有的都p's
出现在开头、q's
结尾,并且中间的值按字母顺序排序?
l = ['f','g','p','a','p','c','b','q','z','n','d','t','q']
所以我想拥有:
['p','p','a','b','c','d','f','g','n','t','z','q','q']
解决方案
您可以使用sorted
以下内容key
:
sorted(l, key = lambda s: (s!='p', s=='q', s))
['p', 'p', 'a', 'b', 'c', 'd', 'f', 'g', 'n', 't', 'z', 'q', 'q']
解释
为了更好地了解这是如何工作的,以下列表推导旨在复制在进行比较之前从参数中lambda
定义的函数返回的内容:key
t = [(s!='p', s=='q', s) for s in pl]
print(t)
[(True, False, 'f'),
(True, False, 'g'),
(False, False, 'p'),
(True, False, 'a'),
(False, False, 'p'),
(True, False, 'c'),
(True, False, 'b'),
(True, True, 'q'),
(True, False, 'z'),
(True, False, 'n'),
(True, False, 'd'),
(True, False, 't'),
(True, True, 'q')]
这将key
用于对列表中的项目进行排序,如文档中所述:
key 参数的值应该是一个函数,它接受一个参数并返回一个用于排序目的的键。
因此,考虑到False = 0
和True = 1
,当这个元组列表被排序时,结果将如下:
sorted(t)
[(False, False, 'p'),
(False, False, 'p'),
(True, False, 'a'),
(True, False, 'b'),
(True, False, 'c'),
(True, False, 'd'),
(True, False, 'f'),
(True, False, 'g'),
(True, False, 'n'),
(True, False, 't'),
(True, False, 'z'),
(True, True, 'q'),
(True, True, 'q')]
推荐阅读
- spacy - 如何将匹配项添加为实体并将其可视化?
- laravel - 从 API 登录 Laravel 时出现错误 token_not_provided JWT
- ios - ContainerView 视图中的后退按钮不起作用
- java - 在 Mac 上使用 Maven 测试 Selenium
- git - springboot - 如何从 manifest.yml 或 Java_Opts 访问私有 git 存储库文件
- c++ - 如何在 C++ 中调用单例实例的析构函数?
- javascript - jQuery多选只是从一个选择框复制到另一个
- android - 通过反向代理服务器将 socket.io android 客户端连接到套接字服务器
- azure - 将变量从 json 文件传递到 Azure 模块
- javascript - fetch api中javascript中的响应重排