我有一个for
循环,它将字符串列表中每个元素的子字符串与另一个字符串列表中的元素进行比较。
mylist = []
for x in list1:
mat = False
for y in list2:
if x[:-14] in y:
mat = True
if not mat:
mylist.append(x)
但是我想把它放在列表理解中(因为循环并不像我的口味那么简洁)但是找不到计算mat
的方法。
我尝试过各种变体:
mylist = [x for x in list1 if x[:-14] in list2]
但这与原始循环的逻辑不同。有没有办法将原始for循环改为列表理解?
答案 0 :(得分:4)
正如写的那样,你不能直接把它写成列表理解。
但是,如果将mat
的计算重写为单个表达式。 (在这种情况下,您将使用any
)
mylist = []
for x in list1:
mat = any((x[:-14] in y) for y in list2)
if not mat:
mylist.append(x)
然后将该定义直接移至if not
条件:
mylist = []
for x in list1:
if not any((x[:-14] in y) for y in list2):
mylist.append(x)
现在转换非常简单:
mylist = [x for x in list1 if not any((x[:-14] in y) for y in list2)]
答案 1 :(得分:-1)
你在寻找这样的东西吗?:
mylist = [x for x in list1 if x[:-14] not in list2]