2015-10-10 31 views
1

我爲什麼以下兩個for循環的情況產生不同的輸出,從線的同一列表開始很困惑:python中的無括號的v。括號中的'for循環'的區別?

print lines 
    ['175.11\n', '176.39\t56.887\n', '178.17\n', '176.1\t51.679\n', '176.1\t51.679\n', '175.15\n', '176.91\t32.149\t30.344\n', '182.33\n', '173.04\n', '174.31\n'] 

場景#1:括號內的for循環

當我運行以下:

lines = ["Total = "+line for line in lines] 
print lines 

線變爲:

['Total = 175.11\n', 'Total = 176.39\t56.887\n', 'Total = 178.17\n', 'Total = 176.1\t51.679\n', 'Total = 176.1\t51.679\n', 'Total = 175.15\n', 'Total = 176.91\t32.149\t30.344\n', 'Total = 182.33\n', 'Total = 173.04\n', 'Total = 174.31\n'] 

場景#2:取消括號內爲環

但是,當我運行此:

for line in lines: 
    lines = ["Total = "+line] 
print lines 

線才成爲:

['Total = 174.31\n'] 

我將不勝感激任何幫助解釋這裏發生了什麼! (另外,我應該提一下,我對SCENARIO#1的輸出更感興趣,但希望使用SCENARIO#2的格式來完成)。

+2

你讀過[Python教程](https://docs.python.org/tutorial)嗎?你所說的「括號內循環」實際上是一個列表理解,它根本不是for循環(儘管它有一些相似之處)。 – BrenBarn

+1

啊,好的,謝謝@BrenBarn!我沒有意識到...我不知道谷歌如何「括號內的循環」。這現在解釋了很多。 – Dennis

回答

3

您正在覆蓋每個循環迭代的列表,而不是附加到它。

的修復將是:

myList = [] 
for line in lines: 
    myList.append("Total = " + line) # appends the r-value to your list 

但我還是喜歡列表理解爲它的簡潔,反正。

您還可以使用條件列表理解:

# excludes empty lines 
myList = ["Total = "+line for line in lines if len(line) > 0] 

您通過

修改你迭代一個列表,你的for循環的lines要附加新項目的進展。任何時候你修改一個容器,你都在迭代結果會造成破壞。 Read this question

+1

在Python中不是'list'內建的嗎? –

+0

@PeterWood我的錯誤。編輯以反映這一點。 –

+0

是的,'list'是內建列表類型的名稱。 – BrenBarn

相關問題