检查python中两个列表中所有项的条件

时间:2013-08-13 05:16:49

标签: python list

我需要检查两个一维列表中所有项目的条件

例如:

L = [12,23,56,123,13,15]
B = [45,89,12,45,19,89]

对于上面两个列表,我如何检查条件if(L[i] > (float(B[i]*1.1)))其中'i'是索引从索引0开始到列表中的所有项目(在这种情况下索引是0到5) 。我还需要打印不符合条件的list1(L)的项目吗?

3 个答案:

答案 0 :(得分:6)

如果我理解正确,您可以使用生成器表达式和zip函数

执行此操作
L = [12,23,56,123,13,15]
B = [45,89,12,45,19,89]
all(x[0] > (x[1]*1.1) for x in zip(L, B))
或者,正如Ashwini Chaudhary在评论中建议的那样,值解包:

L = [12,23,56,123,13,15]
B = [45,89,12,45,19,89]
all(l > (b * 1.1) for l, b in zip(L, B))

从列表L中获取不符合条件的项目:

[l for l, b in zip(L, B) if l <= (b * 1.1)]

答案 1 :(得分:2)

不确定这是你想要的,但它是一个很酷的numpy事物

>>> L = numpy.array(L)
>>> B = numpy.array(B)
>>> B < L
array([False, False,  True,  True, False, False], dtype=bool)
>>> L[L > B* 1.1]
array([ 56, 123])
>>> all(L > B*1.1)

答案 2 :(得分:0)

为了打印匹配的,您可以使用

matching = (l > float(b * 1.1) for l, b in zip(L, B))

这为您提供了一个可以根据需要使用的生成器。 E.g:

for m, l in zip(matching, L):
    if m:
        print l

但你也可以直接生成匹配的迭代器:

matching = (l for l, b in zip(L, B) if l > float(b * 1.1))

然后打印它们或只检查空虚。

根据您的目的,将生成器表达式更改为列表解析可能是合适的:

matching = [l for l, b in zip(L, B) if l > float(b * 1.1)]