2016-12-07 61 views
-1
input_shape = tuple([i for i in input_shape if i is not None]) 

我是新來的python,不明白那裏發生了什麼。 正如我所看到的,它可能是Cint a = 5 > 2 ? val1 : val2;的一些模擬,但我無法弄清楚。以下列表理解的解釋是什麼?

我試圖將它分成小部分來理解,但它對我來說仍然沒有意義。 像這樣:

i // this is already wrong for being single 
for i in input_shape //that's correct for cicle 
    if i is not None //ugh... so, and what if? 
+0

未通過測試的項目(在此處爲「無」)將被循環跳過。 – spectras

+0

我不是無添加項目。 – Backtrack

回答

1

你是幾乎在那裏與你分開。內部部分(如果)是你注意到的表達錯誤的表達(i),它實際上進入內部。而它對它的作用是通過括在括號內表示的[];它把這些東西放在一個列表中。 spectras的答案顯示瞭如何使用變量來保存該列表。該構建體被稱爲list comprehension

+0

感謝您解釋這一點。我閱讀文檔,尤其是像這樣的'list comprehension'例子中的'更簡潔和**可讀**'這個短語:D – Kosmos

3

無法通過測試的項目(在此爲無)將被循環跳過。

input_shape = tuple([i for i in input_shape if i is not None]) 

# Roughly equivalent to  

result = [] 
for i in input_shape: 
    if i is not None: 
     result.append(i) 
input_shape = tuple(result) 

概念上是相同的,除了列表解析會更快的循環被解釋內部完成。另外,它顯然不會在result之間留下變量。

+0

這是最完整的答案,它實際解釋了列表解析如何工作並應該被接受。 –

+0

@AhsanulHaque - 對於像我這樣完全不瞭解它是如何工作的人來說,「Yann Vernier」的答案更有用,因爲它實際上解釋瞭如何閱讀這樣的構造。他解釋說,爲了理解這一切,我需要首先在'if'條件下移動'i'。所有其他答案只是說結果會是什麼,而不是解釋如何閱讀它。 – Kosmos

1

i for i部分可以是任何東西,x for x,y for y或甚至Kosmos for Kosmos

>>> input_shape = [1, 2, 3] 
>>> input_shape = tuple([i for i in input_shape if i is not None]) 
>>> input_shape 
(1, 2, 3) 

在這裏你可以看到,它通過遍歷每個項目轉換我的列表的元組。

查找到一個名爲列表理解,因爲我有一個艱難的時間來解釋它

1
input_shape = [1,2,3,None,5,1] 
print(input_shape) 
input_shape = tuple([i for i in input_shape if i is not None]) 
print(input_shape) 

O/P

[1, 2, 3, None, 5, 1] 
(1, 2, 3, 5, 1) 

爲@spectras指出的東西,那未通過測試的項目(即在這裏是None)將被循環跳過。

1

以下是list comprehension

[i for i in input_shape if i is not None] 

它只返回那些未None

然後,你叫tuple()轉換的結果列表中的元組元素。

您可以通過使用普通的for循環像下面得到相同的結果:

input_shape = [1, 2, None, 'a', 'b', None] 
result = [] 

for i in input_shape: 
    if i is not None: 
     result.append(i) 

print(result) 
# Output: [1, 2, 'a', 'b'] 

現在,我們把result(的list類型)tuple這樣的:

final_result = tuple(result) 
print(final_result) 
# Output: (1, 2, 'a', 'b') 
相關問題