列表理解中的嵌套循环

时间:2016-11-06 04:18:03

标签: python list loops

我在l中有一个单词列表,如果它们中的任何一个存在于l2中每个元组的第一个索引中,则删除整个元组。

我的代码:

l = ['hi', 'thanks', 'thank', 'bye', 'ok', 'yes', 'okay']
l2 = [('hi how are u', 'doing great'), ('looking for me', 'please hold')]
l3 = [k for k in l2 if not any(i in k[0] for i in l) ]

某种程度上代码不起作用,我找回了l3的空列表。

我想要

l3 = [('looking for me', 'please hold')]

2 个答案:

答案 0 :(得分:4)

拆分k[0]以获取字词列表:

[k for k in l2 if not any(i in k[0].split() for i in l)]

这样可以检查i是否与单词完全匹配。

也可以解释为k[0]不是以l的任何一个开头,那么你可以这样做:

[k for k in l2 if not k[0].startswith(tuple(l))]

答案 1 :(得分:0)

设置简化会员资格测试。使用函数过滤列表。

import operator
first = operator.itemgetter(0

l = ['hi', 'thanks', 'thank', 'bye', 'ok', 'yes', 'okay']
l2 = [('hi how are u', 'doing great'), ('looking for me', 'please hold')]

def foo(t, l = set(l)):
    t = set(first(t).split())
    return bool(l & t)

l3 = [thing for thing in l2 if not foo(thing)]