Python 2.7 如果没有任何语法?

Ark*_*gel 2 syntax if-statement list python-2.7

我刚刚在删除包含某些字符串问题的行上阅读了Sloth的精彩回复,同时寻找一种方法来过滤掉 txt/csv 文件中的垃圾行。要点是“从输入文件中获取 xyz 单词/字符串/任何内容,然后过滤每一行,只写未过滤的行。”

他贴出的代码是:

bad_words = ['bad', 'naughty']

with open('oldfile.txt') as oldfile, open('newfile.txt', 'w') as newfile:
for line in oldfile:
    if not any(bad_word in line for bad_word in bad_words):
        newfile.write(line)
Run Code Online (Sandbox Code Playgroud)

我的问题是:有人会解释这条线if not any(bad_word in line for bad_word in bad_words):吗?

我试过只输入,if not any(bad_word in line):但它给了我一个错误。

我试图理解为什么。在 python 文档网页上粗略搜索并没有帮助我(我是 Python/编程的新手,可能不太聪明,无法启动 :-))。

感谢我阅读的任何参考资料。

谢谢!

Gil*_*pie 5

有人会解释这条线吗 if not any(bad_word in line for bad_word in bad_words)

当然。

bad_word in line for bad_word in bad_words就是所谓的生成器表达式。它与列表理解非常相似,但内存效率更高。

if not any(bad_word in line for bad_word in bad_words):
    newfile.write(line)
Run Code Online (Sandbox Code Playgroud)

基本上相当于:

list1 = []
for bad_word in bad_words:
    if bad_word in line:
        list1.append(True)
    else:
        list1.append(False)

if not any(list1):
    newfile.write(line)
Run Code Online (Sandbox Code Playgroud)

我试过只放进去,if not any(bad_word in line):但它给了我一个错误

是的,因为any将一个可迭代对象作为输入,并且您提供了一个布尔值(bad_word in line计算结果为 True 或 False,您无法对其进行迭代)。

尝试提供可以迭代的内容,例如列表:if not any([True, False, True]):

  • “bad_word in line for bad_words in bad_words”是一个生成器而不是一个列表。 (5认同)