繁体   English   中英

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

[英]to check a condition for all the items in two list in python

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

例如:

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)的项目?

如果我理解你,你可以使用生成器表达和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)]

不确定这是你想要的,但它是一个很酷的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)

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

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

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

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)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM