python - 如何根据特定数据集在 Python 中对数组进行排序
问题描述
我正在使用 Python,并且在数组列表中有以下目录和文件,如下所示:
file_list = []
for file in file_list:
print(file)
输出如下所示,没有特定的顺序。
Testcase/result.log
Testcase/system/system.log
Testcase/data/database.log
Testcase/mem/mem.log
Testcase/cashe/cashe.log
现在,我有另一个名为的 Python 字符串target_str
,它可以具有随机值,例如'mem'
or 'database'
。在这种情况下,如果与内容target_str
条目匹配,则应更改数组file_list
的顺序,将匹配的值放在第一位。file_list
例如:
target_str = 'mem'
Testcase/mem/mem.log [Note: this entry moves at the first position since it matches the 'target_str']
Testcase/result.log
Testcase/system/system.log
Testcase/data/database.log
Testcase/cashe/cashe.log
想知道如何file_list
根据 的值对条目进行排序target_str
?
解决方案
您可以使用该函数sorted()
并为其提供一个 lambda 键。在这种情况下,我们将保持它们相同的顺序,但将包含的那些target_str
移到顶部:
file_list = [
'Testcase/result.log',
'Testcase/system/system.log',
'Testcase/data/database.log',
'Testcase/mem/mem.log',
'Testcase/cashe/cashe.log',
]
print(
sorted(file_list, key=lambda f:[target_str not in f, file_list.index(f)])
)
# [
# 'Testcase/mem/mem.log',
# 'Testcase/result.log',
# 'Testcase/system/system.log',
# 'Testcase/data/database.log',
# 'Testcase/cashe/cashe.log'
# ]
如果key
函数 forsorted()
返回一个列表或元组,则元素按该顺序优先排序。首先,排序target_str not in f
(False
排序之前True
,所以如果文件名确实包含目标字符串,它会排在第一位)。然后,在平局的情况下,按文件名的索引排序。
如果您有一个非常大的文件列表,那么您可能希望改为排序enumerate(file_list)
,以获取每个文件的索引,而不必.index()
每次都调用。.index()
太贵了。
推荐阅读
- python - YouTube Data Api:如果达到配额限制,则打破 nextPageToken while 循环?
- python - os 模块 python 正在工作,但输出不正确
- regex - 如何为文本字段实现正则表达式以在 Extjs 中一次允许一个逗号一个点
- laravel - Laravel - 试图获取非对象的属性“名称”
- java - Spring SAML:后退浏览器按钮导致验证 SAML 消息时出错
- ios - React Native 0.60.4 从 0.59.9 升级
- python - 在 TfidfVectorizer 中删除法语和英语中的停用词
- c# - ASP.NET Core Identity,如何覆盖 IdentityRole Name 唯一索引?我想存储关于租户的重复名称
- web-scraping - 基于页面内容的操作
- javascript - 为什么我的选择器无法读取“状态”?状态未定义