2

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

例如:

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) 的条件不符合?

4

3 回答 3

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)]
于 2013-08-13T05:19:04.717 回答
2

不确定这是你想要的,但它是一件很酷的事情

>>> 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)
于 2013-08-13T05:32:18.947 回答
0

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

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)]
于 2013-08-13T05:47:41.730 回答