我有一个文件列表,如果列表中不存在给定的文件名,则需要设置一个标志.所以我有:
if all('FileName' not in f for f in files):
# set flag
Run Code Online (Sandbox Code Playgroud)
我想扩展此检查以查找多个文件名,因此我创建了一个文件名列表:
file_names = ['FileName', 'FileName2']
Run Code Online (Sandbox Code Playgroud)
在psuedo代码中,我正在寻找:
if all(#all file names in files_names# not in f for f in files):
# set flag
Run Code Online (Sandbox Code Playgroud)
我还能以某种方式使用内置的所有功能来实现这一点吗?或者我需要将它分成多个语句?
谢谢你的帮助.
如果我理解正确的话......一种方法是将两者都转换成集合:
files = set(files)
file_names = set(file_names)
if not file_names <= files:
# set flag
Run Code Online (Sandbox Code Playgroud)
请注意,它<=是子集运算符(快捷方式.issubset).
编辑如果要检查是否所有文件都不在,files则可以使用交集运算符&(或.intersection方法)检查两个集合中是否存在共同元素:
if not file_names & files:
# set flag
Run Code Online (Sandbox Code Playgroud)
如果要保留列表结构,则可以使用临时转换:
if not set(file_names) & set(files):
# set flag
# file_names is still a list
Run Code Online (Sandbox Code Playgroud)
该解决方案不仅优雅而且高效.在这里阅读更多关于集合:
http://docs.python.org/2/library/sets.html
编辑2如果你想检查名称file_names是否包含在名称中(不像我的解决方案,我只检查名称之间的严格相等),files你可以使用这个:
if all(all(name not in fn for fn in files) for name in file_names):
# set flag
Run Code Online (Sandbox Code Playgroud)
与您编写的伪代码非常相似.它展示了Python的美妙之处.:D使用集合在这种情况下无关紧要.
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |