2017-04-15 37 views
0

這裏,我已經從列表打印常見項一些代碼,並設定()。 我沒有得到什麼結果變量的說法。打印常見的項目,並設定()

import random 
a = random.sample(range(1,30), 12) 
b = random.sample(range(1,30), 16) 
result = [i for i in set(a) if i in b] 

下面一行是什麼意思。請解釋我新編程。

[i for i in set(a) if i in b] 
+0

它打印的普通物品。我沒有看到一個問題 –

回答

0

最後一行執行在列表解析的ab值之間的交叉點。只有pooly執行:

首先,我不明白爲什麼轉aset。對整數採樣range總是提供不同的值。在這種情況下,它不會加快處理速度,只會隨着順序(已經是隨機的...)而混亂。

然後,if i in b是無效的(不顯着,如果有隻有幾個值),因爲線性搜索(b是一個list

我把它改寫這樣的:

a = random.sample(range(1,30), 12) 
b = set(random.sample(range(1,30), 16)) 
result = [i for i in a if i in b] 

甚至更好的使用setintersection方法。

result = set(random.sample(range(1,30), 12)).intersection(random.sample(range(1,30), 16)) 

在這兩個重寫,我們創建一個set,要能夠使用快速查找/交叉點與其他迭代。

0

這就是所謂的名單理解,基本上是做你的陣列,或字典裏面經常循環。

初學Python程序員一個更可讀的代碼如下:

results = [] 
for i in set(a): 
    if i in b: 
     results.append(i) 

您正在尋找到list(a)只保留那些誰在這兩個list(a)list(b)

+0

多少可讀?這只是寫它的另一種方式。列表理解_is_可讀。 –

+0

可讀初學者,不是有人熟悉Python語法 –

+0

列表理解是比經典的循環結構要快得多。更好地教育人們。 –