2017-07-25 23 views
0

試圖編寫一個列表理解,該列表理解可以從input()中迭代一個字符串,並創建一個具有自己索引的字符串的每個字符的列表。使用列表推導和輸入的問題()

從本質上說,我希望有一個功能,這是否:

x = ["00.00"[h] for h in range(len("00.00"))] 
print(x) 
> ['0', '0', '.', '0', '0'] 

在那裏把一個實際字符串(「00.00」)時,蟒蛇也正是我想要它做的。但它拒絕接受輸入()以同樣的方式:

>>> x = [input()[h] for h in range(len(input()))] 
> what 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 1, in <listcomp> 
IndexError: string index out of range 

在有「什麼」這個詞是我輸入,但它同樣爲基本上一切我已經把我。不確定input()會如何改變索引的工作方式。它是什麼?

+1

存儲輸入的'()的結果'在一個變量,或者它會在每次迭代被執行... –

回答

4

您製作了一個頗爲冗長的拼寫list()。有沒有必要使用列表理解這裏:

list(input()) 

錯在你的是,在列表理解前面的表達式求值爲每一個迭代;所以你先撥打input()得到一個字符串,然後對於那個字符串中的每個字符,你可以再次調用input(),但是這次輸入的字符串不一定是相同的。

如果你需要一個字符串的列表理解,只需直接迭代字符串。 Python for循環是for each construct,不需要生成索引;例如,以過濾輸入以產生的小寫ASCII字母的列表,就沒有必要使用range()

[char for char in input() if 'a' <= char <= 'b'] 
+0

我仍然是一個超級巨大的新手,在今天之前我必須誠實地對待你,我不明白列表解析是如何工作的。忘記這個功能存在。謝謝。 –