将for循环转换为列表推导

时间:2016-06-14 22:03:58

标签: python list list-comprehension

我有一个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循环改为列表理解?

2 个答案:

答案 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]