2014-11-23 92 views
-3

寫功能commonElements(T1,T2),其在2元組取作爲參數,並返回包含了在兩個元組找到的元素的排序元組。如何比較兩個元組?

例子

>>> commonElements((1, 2, 3), (2, 5, 1)) 
(1, 2) 
>>> commonElements((1, 2, 3, 'p', 'n'), (2, 5 ,1, 'p')) 
(1, 2, 'p') 
>>> commonElements((1, 3, 'p', 'n'), ('a', 2 , 5, 1, 'p')) 
(1, 'p') 

我想兩個元

def commonElements(t1,t2): 
    if t1 in t2: 
     return t1 
+0

你嘗試過什麼?的[元組比較] – vaultah 2014-11-23 11:45:29

+0

可能重複(http://stackoverflow.com/questions/4405122/tuple-comparison) – Aleksandar 2014-11-23 11:49:38

+0

是,但它給我的錯誤 – 2014-11-23 11:50:05

回答

0

您將需要檢查,如果每個元素in T1是in T2之間進行比較,你的代碼只是返回t1當你發現第一次共同元件或無如果沒有共同的元素:

def commonElements(t1,t2): 
    temp = [] # store common elements 
    st2 = set(t2) 
    for ele in t1: # loop over each element in t1 
     if ele in st2: # if it is in t2 add it to or temp list, set lookups are O(1) 
      temp.append(ele) 
    return tuple(sorted(temp)) # sort temp and convert to a tuple 

In [4]: commonElements((1, 2, 3), (2, 5, 1)) 
Out[4]: (1, 2) 

In [5]: commonElements((1, 2, 3, 'p', 'n'), (2, 5 ,1, 'p')) 
Out[5]: (1, 2, 'p') 

In [6]: commonElements((1, 3, 'p', 'n'), ('a', 2 , 5, 1, 'p')) 
Out[6]: (1, 'p') 

您還可以使用setsgenerator expression

def commonElements(t1,t2): 
    # find the intersection/common elements 
    return tuple(sorted(set(t1).intersection(t2))) 

def commonElements(t1,t2): 
    return tuple(sorted(ele for ele in t1 if ele in t2)) 
+0

@vaultah,它在哪裏說python 3? – 2014-11-23 12:01:26

+0

@vaultah,以及假設的任務是將輸出我想象中的老師是不會放棄這個問題 – 2014-11-23 12:02:55

+1

我想一些建議是在蟒蛇@Padraic坎寧安 – 2014-11-23 12:06:25

1

你可以使用的套基於運營商交集。

def commonElements(one, two): 
    return tuple(sorted(set(one) & set(two))) 

commonElements((1,2,3), (2,3,4)) 
# (2, 3)