根据Python3列表中的partitial字符串删除字符串?

时间:2015-12-03 01:04:22

标签: python-3.x

我知道我必须在这里处理我的列表副本,以便在迭代时从中删除项目。

此处的示例代码查找3个子字符串。这看起来不像pythonic。

#!/usr/bin/env python3

with open('stringlist', 'r') as f:
    mylist = f.read().splitlines()

for s in mylist[:]:
    if 'Australia' in a:
        mylist.remove(s)
    if 'Canada' in a:
        mylist.remove(s)
    if 'USA' in a:
        mylist.remove(s)

如何做得更优雅?

1 个答案:

答案 0 :(得分:0)

如下所示:

unwanted = [
    'Australia',
    'Canada',
    'USA',
    ]

my_list = []
with open('stringlist') as source:
    for line in source:
        if any(word in line for word in unwanted):
            continue

        my_list.append(line)

print(my_list)

代码目前尚未经过测试,但应该有效......

in-for-in

的附录

您应该阅读以下主题:

any(word in line for word in unwanted)由三个独立的部分组成:

  • any(...) - 如果任何列表元素为True
  • ,则返回True
  • word in line - 一个简单的表达式,用于测试word
  • 中是否找到了line
  • for word in unwanted - 一个内部 for循环,我们在unwanted列表上循环,将每个元素放入word

执行相同操作的较长版本:

tmp_list = []
for word in unwanted:
    tmp_bool = word in line
    tmp_list.append(tmp_bool)

any(tmp_list) 

当与括号[{1}}一起使用时,它被称为生成器表达式,但这通常被视为列表推导,其中一个使用方括号( ... )

[ ... ]

哪会返回10以下的奇数列表。