我的清单如下:
z = [('Anna Smith', 'IN1'), ('John', 'IN2'), ('Matt Andrew', 'IN3'), ('Smith', 'IN4')]
还有另一个清单:
c = ['Anna Smith', 'John', 'Anna', 'Smith']
我想要以下输出:
o = ['Anna Smith|IN1', 'John|IN2', 'Smith|IN4']
我尝试了以下代码:
for s, s_inc in z:
for word in c:
if word.lower() in s.lower():
o.append("%s|%s"%(word, s_inc))
但上面给出的结果是:
o = ['Anna Smith|IN1', 'Anna|IN1', 'Smith|IN1', 'John|IN2', 'Smith|IN4']
我怎样才能得到我想要的?你知道吗
试试这个:
对于这种类型的过滤/列表操作问题,列表理解是一种优雅的方法。你知道吗
理解包括三个部分:
-首先在a+'|'+b中构造结果
-其次,a和b被分配给列表z中每个2元组中的第一和第二元素
-第三,我们在a必须是列表c的成员的条件下进行过滤
从您的示例来看,似乎您正在寻找一个完全匹配的,所以只需使用
==
而不是in
:或更短,作为单一列表:
在这之后,
o
就是['Anna Smith|IN1', 'John|IN2', 'Smith|IN4']
相关问题 更多 >
编程相关推荐