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

时间:2015-01-23 23:44:06

标签: python list comparison

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

a: [1 2 3 6]

大于或等于另一个列表中的对应元素

b: [0 2 3 5]

如果a [i]> b [i]为所有 i ' s,然后返回true,否则为false。 这有逻辑功能吗?例如a> b?感谢

6 个答案:

答案 0 :(得分:6)

你可以做到

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

具有短路评估的优势:如果找到任何x < y,它会立即返回False

答案 1 :(得分:3)

如果您确实想要将a中的每个元素与b进行比较,那么您实际上只需要检查max的{​​{1}}所以它将是{{1}如果我们发现任何小于b的最大元素,则解决方案短路:

b

对于pairwise,您可以使用enumerate:

0(n)

或者使用hughbothwell的zip概念使用itertools.zip:

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

或numpy:

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

答案 2 :(得分:1)

你可以写出一个显式的for循环,或者你可以用解释器做一个内联双循环和一个all,如下所示。

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

答案 3 :(得分:0)

如果您愿意使用numpy,可以使用逻辑函数执行此操作(并且它比纯python列表比较快得多)

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

答案 4 :(得分:0)

这个怎么样?我是否赢得了代码高尔夫?

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

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

答案 5 :(得分:-1)

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)