2010-10-03 127 views
-2

你好我想比较两个列表这样Python的比较两个列表

A = [1,2] B = 10,20] 比较(A,B)将返回真,如果在每个元素是>对应在b

所以比较([1,2]> [3,4])为True

比较([1,20]> [3,4])为假

hiow到元件pythonic way的用法和样例:

干杯

+2

您应该花更多时间来编写您的问题。使用4个空格缩进设置代码块,检查拼写,并尝试使用适当的英文标点符号。如果你花时间写出你的问题,人们更可能花时间回答。 – 2010-10-03 02:10:06

+1

你说过“b中的每个元素都是> b中的对应元素”,对于[1,2]> [3,4] =真是这样吗? – 2010-10-03 04:16:18

回答

10

使用zip

len(a) == len(b) and all(j > i for i, j in zip(a, b)) 
1

我不完全相信你在找什么,因为在你的例子所示的结果似乎违背你说你就想回来,也没有指定什么希望如果两个列表的长度不相等或两者都为空。

由于这些原因,我的答案明确地处理了大多数这些情况,因此您可以轻松地对其进行更改以满足您的需求。我也已经完成了一个谓词函数的比较,所以也可以改变。尤其要注意最后三个测试用例。

顺便说一句,@Mike Axiak的答案如果非常好,如果他所有的隐含假设都是正确的。

def compare_all(pred, a, b): 
    """return True if pred() is True when applied to each 
     element in 'a' and its corresponding element in 'b'""" 

    def maxlen(a, b): # local function 
     maxlen.value = max(len(a), len(b)) 
     return maxlen.value 

    if maxlen(a, b): # one or both sequences are non-empty 
     for i in range(maxlen.value): 
      try: 
       if not pred(a[i], b[i]): 
        return False 
      except IndexError: # unequal sequence lengths 
       if len(a) > len(b): 
        return False # second sequence is shorter than first 
       else:    
        return True # first sequence is shorter than second 
     else: 
      return True # pred() was True for all elements in both 
         # of the non-empty equal-length sequences 
    else: # both sequences were empty 
     return False 

print compare_all(lambda x,y: x>y, [1,2], [3,4]) # False 
print compare_all(lambda x,y: x>y, [3,4], [1,2]) # True 
print compare_all(lambda x,y: x>y, [3,4], [1,2,3]) # True 
print compare_all(lambda x,y: x>y, [3,4,5], [1,2]) # False 
print compare_all(lambda x,y: x>y, [], [])   # False