Python:如何筛选列表B中包含列表A元素的项?
解决Python列表筛选匹配问题
你的问题出在筛选逻辑错误:原代码里的x[0]是取字符串的第一个字符,而不是检查字符串是否包含listing里的子串,自然匹配不到'OVER'或'FLOW',所以返回空列表。
正确解法
使用any()函数结合列表推导式,检查每个文件名是否包含listing中的任意子串:
pklFilenamesList = [r'path\202206_DATASET_STACK_.pkl', r'path\202206_DATASET_OVER_.pkl', r'path\202206_DATASET_FLOW_.pkl'] listing = ['OVER','FLOW'] pickle = [x for x in pklFilenamesList if any(sub in x for sub in listing)] print(pickle)
代码说明
any(sub in x for sub in listing):遍历listing中的每个子串,只要有一个子串存在于当前文件名x中,就返回True,该文件名会被保留到结果列表。- 注意:路径字符串中的反斜杠
\在Python中是转义字符,建议用原始字符串前缀r(如r'path\...')或者双反斜杠\\避免转义问题。
预期输出
['path\\202206_DATASET_OVER_.pkl', 'path\\202206_DATASET_FLOW_.pkl']
内容的提问来源于stack exchange,提问作者Jonnyboi
相关产品推荐
相关产品推荐

