2010-10-03 132 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