Python: pairwise comparison between two lists: list a >= list b?
如果我想检查列表中的所有元素
大于或等于其他列表中相应的元素
江户十一〔一〕号
如果A[I]>B[I]代表我的全部,那么返回真,否则返回假。这个有逻辑功能吗?比如A>B?谢谢
你可以这么做
1 | all(x >= y for x,y in zip(a,b)) |
号
具有短路评估的优点:如果发现有
如果你真的想把
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) |