Python:两个列表之间的成对比较:列出a> = list b?

Python: pairwise comparison between two lists: list a >= list b?

如果我想检查列表中的所有元素

a: [1 2 3 6]

大于或等于其他列表中相应的元素

江户十一〔一〕号

如果A[I]>B[I]代表我的全部,那么返回真,否则返回假。这个有逻辑功能吗?比如A>B?谢谢


你可以这么做

1
all(x >= y for x,y in zip(a,b))

具有短路评估的优点:如果发现有x < y,立即返回False


如果你真的想把a中的每一个元素与b中的每一个元素进行比较,你只需要对照b中的max进行检查,如果我们发现任何元素小于b的最大值,那么它就是0(n)解短路:

1
2
mx = max(b)
print(all(x >= mx for x in a))

对于成对,可以使用枚举:

1
print(all(x >= b[ind] for ind,x in enumerate(a)))

或者使用HughBothwell的zip思想,使用itertools.zip:

1
2
from itertools import izip
print(all(x >= y for x,y  in izip(a,b)))

或麻木:

1
2
3
print(np.greater_equal(a,b).all())

print(np.all(a >= b))


您可以编写一个显式for循环,也可以使用解释器执行一个内联的双循环和一个all,如下所示。

1
2
3
4
5
6
7
>>> a = {1,2,3,4}
>>> b = {2,3,4,5}
>>> lst = [x>y for x in a for y in b]
>>> lst
[False, False, False, False, False, False, False, False, True, False, False, False, True, True, False,False]
>>> all(bool==True for bool in lst)
False


这个怎么样?我能赢得代码高尔夫吗?

1
2
3
4
a=[1,3,8,6]
b=[0,2,3,5]

print all(map(cmp,a,b))


如果您愿意使用numpy,您可以使用逻辑函数(它比纯Python列表比较快得多)。

1
2
3
4
5
6
>>> from numpy import array
>>> a=array([1,2,3,4,5])
>>> b=array([3,0,3,1,2])
>>> a > b
array([False,  True, False,  True,  True], dtype=bool)
>>>


1
2
3
4
5
6
7
8
9
10
11
12
a = [1, 2, 3, 6]
b = [0, 2, 3, 5]

def check_lists(a, b):
    result = []

    for i in range(len(a)):
        result.append(a[i] >= b[i])

    return result

print check_lists(a, b)