Python:两个列表之间的两两比较:list a >= list b?
Python: pairwise comparison between two lists: list a >= list b?
如果我想检查列表中的所有元素
a: [1 2 3 6]
大于或等于它们在另一个列表中的对应元素
b: [0 2 3 5]
如果所有 i 的 a[ i ] > b[ i ],则 return 为真,否则为假。
这有逻辑功能吗?比如a>b?谢谢
如果你愿意使用 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)
>>>
你可以这样做
all(x >= y for x,y in zip(a,b))
它具有短路评估的优势:如果它发现任何 x < y
它立即 returns False
。
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)
您可以编写一个显式的 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
如果您真的想将 a
中的每个元素与 b
中的每个元素进行比较,您实际上只需要检查 b
的 max
所以它将是一个 0(n)
如果我们发现任何元素小于 b 的最大值,则解决短路问题:
mx = max(b)
print(all(x >= mx for x in a))
对于成对你可以使用枚举:
print(all(x >= b[ind] for ind,x in enumerate(a)))
或者使用 hughbothwell 的 zip idea itertools.zip:
from itertools import izip
print(all(x >= y for x,y in izip(a,b)))
或 numpy:
print(np.greater_equal(a,b).all())
print(np.all(a >= b))
这个怎么样?我赢得代码高尔夫了吗?
a=[1,3,8,6]
b=[0,2,3,5]
print all(map(cmp,a,b))
如果我想检查列表中的所有元素
a: [1 2 3 6]
大于或等于它们在另一个列表中的对应元素
b: [0 2 3 5]
如果所有 i 的 a[ i ] > b[ i ],则 return 为真,否则为假。 这有逻辑功能吗?比如a>b?谢谢
如果你愿意使用 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)
>>>
你可以这样做
all(x >= y for x,y in zip(a,b))
它具有短路评估的优势:如果它发现任何 x < y
它立即 returns False
。
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)
您可以编写一个显式的 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
如果您真的想将 a
中的每个元素与 b
中的每个元素进行比较,您实际上只需要检查 b
的 max
所以它将是一个 0(n)
如果我们发现任何元素小于 b 的最大值,则解决短路问题:
mx = max(b)
print(all(x >= mx for x in a))
对于成对你可以使用枚举:
print(all(x >= b[ind] for ind,x in enumerate(a)))
或者使用 hughbothwell 的 zip idea itertools.zip:
from itertools import izip
print(all(x >= y for x,y in izip(a,b)))
或 numpy:
print(np.greater_equal(a,b).all())
print(np.all(a >= b))
这个怎么样?我赢得代码高尔夫了吗?
a=[1,3,8,6]
b=[0,2,3,5]
print all(map(cmp,a,b))