2016-11-16 15 views
1

我遇到了一個非常精簡的代碼塊,它使用for-loop和if語句來查找字符串中的所有數字,並將它們添加到列表中。問題是我不明白它爲什麼起作用。如何在列表中構建稠密for循環

string = "h3110 23 cat 444.4 rabbit 11 2 dog" 
alist = [int(s) for s in string.split() if s.isdigit()] 
print (alist) 

此打印['23', '11', '2']

有兩位我不明白:

  1. 被如何定義,在2號線INT(S) 「S」,即使在輸入時for循環之前?
  2. 爲什麼這個代碼沒有else/return/pass /等功能。 if語句的原因是什麼?

此代碼基本上執行以下操作:

alist = [] 
for s in string.split(): 
    if s.isdigit(): 
     alist.append(s) 
    else: 
     pass 
print (alist) 

回答

0

一行程序不正是你已經寫在下面,除了s什麼是轉換爲一個整數(它應該是alist.append(int(s)))。

單行工作如何?它會創建一個新的列表,列出現有列表中的所有元素(在您的情況下,現有列表爲string.split()),if之後的條件爲真 - 元素確實是數字。

3

這不是「列表中的for循環」。 Python中的特殊語法叫做「List Comprehension」。基本語法是:[<expression> for <var> in <iterable>]或可選條件:[<expression> for <var> in <iterable> if <condition>]。它基本上轉化爲:

new_list = [] 
for <var> in <iterable>: 
    if <condition>: 
     new_list.append(<expression>) 

這聽起來像你理解正確的話,你只是不知道,這是特殊的語法,這就是爲什麼它看起來像它試圖訪問還沒有被聲明或定義的變量。如果你有興趣,你可以找到更多關於他們在這裏工作的信息:http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/