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

2024-04-18 06:37:37 发布

您现在位置: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)。我还需要打印列表1(L)中不满足该条件的项?你知道吗


Tags: 项目列表iffloat条件本例
3条回答

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

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

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

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

如果我没听错的话,可以用生成器表达式和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)]

相关问题 更多 >