gpt4 book ai didi

具有多个 Iterables 的 Python all 函数

转载 作者:行者123 更新时间:2023-11-28 21:55:39 25 4
gpt4 key购买 nike

我有一个文件列表,如果列表中不存在给定的文件名,我想设置一个标志。所以我有:

if all('FileName' not in f for f in files):
# set flag

我想扩展此检查以查找多个文件名,因此我创建了一个文件名列表:

file_names = ['FileName', 'FileName2']

在伪代码中,我正在寻找:

if all(#all file names in files_names# not in f for f in files):
# set flag

我仍然可以使用内置的 all 函数以某种方式在一行中实现吗?还是我需要将它分成多个语句?

感谢您的帮助。

最佳答案

如果我理解正确...一种方法是将两者转换成集合:

files = set(files)
file_names = set(file_names)

if not file_names <= files:
# set flag

请注意 <=是子集运算符(.issubset 的快捷方式)。

EDIT 如果你想检查所有文件是否不在files中那么你可以使用交集运算符 & (或 .intersection 方法)检查​​两个集合中是否有共同元素:

if not file_names & files:
# set flag

如果你想保留列表结构,那么你可以使用临时转换:

if not set(file_names) & set(files):
# set flag
# file_names is still a list

该解决方案不仅优雅而且高效。在此处阅读有关集合的更多信息:

http://docs.python.org/2/library/sets.html

EDIT 2 如果您想检查名称是否来自 file_names来自 files 的名称​​包含(与我的解决方案不同,我只检查名称之间的严格相等性)那么你可以使用这个:

if all(all(name not in fn for fn in files) for name in file_names):
# set flag

与您编写的伪代码非常相似。它显示了 Python 是多么美丽。 :D 在那种情况下使用集合并不重要。

关于具有多个 Iterables 的 Python all 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22543787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com