2012-06-26 122 views
1

請幫助我瞭解下面的代碼片段: -瞭解Python代碼片斷

def any(l): 
"whether any number is known from list l" 
    s = set(list(l)[0]) 
    for x in l: 
     s.intersection_update(set(x)) 
    return len(s) > 0 

此爲L是包含列表中選擇一個列表 3元組,例如[(17,14,13),( 19,17,2),(22,11,7),(22,13,1),(23,10,5),(23,11,2),(25,5,2)]等。 特別是我現在面臨困難,瞭解線路3

s=set(list(l)[0]) 
+0

看來這個函數用來檢查列表l中所有元組的共有成員數。 – Fivesheep

回答

2
set(list(l)[0]) 

list(l)l創建一個新列表,然後[0]將獲取其第一個項目,即(17,14,13)。 然後set((17,14,13))返回一組這個元組。 set是一個數據結構,它只包含唯一的可散列元素。 即set((10,12,10))等於{10,12}

>>> l=[(17,14,13),(19,17,2),(22,11,7),(22,13,1),(23,10,5),(23,11,2),(25,5,2)] 
>>> list(l)[0] 
(17, 14, 13) 
>>> set(list(l)[0]) 
{17, 13, 14} 
+0

感謝您的幫助 – Saurabh

0

一個set是可哈希類型的蟒蛇收集具有特定特徵集合中沒有實體可以重複(哈希返回從它的__hash__魔術方法,從而也布爾來自__eq__方法的返回不能與列表中的任何其他實體相同)只要需要不能重複實體的集合,就可以使用它。

如果不知道其使用的上下文,完全不知道代碼片段的意圖,尤其是因爲您擁有的值都是容器列表中的所有元組。 intersection_update是一個集合的方法,它從原始中返回一個集合,只保留在作爲參數傳遞的元素中找到的元素。零索引鍵從列表中獲取第一個元組。

http://docs.python.org/library/sets.html

2

s=set(list(l)[0]),您正在從列表中的第一個元素的集合。在你的情況下,你可以使用set(l[0]),它會做同樣的事情。基本上,你基於列表的第一個元組創建一個集合。總的來說,你的函數試圖找出所有元組之間是否有共同的元素(數字)。