我只是在學習 python 并試圖遍歷一個串列并使用 pop() 從原始串列中洗掉所有專案并將它們添加到格式化的新串列中。這是我使用的代碼:
languages = ['russian', 'english', 'spanish', 'french', 'korean']
formatted_languages = []
for a in languages:
formatted_languages.append(languages.pop().title())
print(formatted_languages)
結果是這樣的:
['Korean', 'French', 'Spanish']
我不明白為什么我只得到回傳串列中 5 個專案中的 3 個。有人可以解釋一下嗎?
謝謝你,魯斯蘭
uj5u.com熱心網友回復:
看:
languages = ['russian', 'english', 'spanish', 'french', 'korean']
formatted_languages = []
for a in languages:
print(a)
print(languages)
formatted_languages.append(languages.pop().title())
print(formatted_languages)
注意“a”是什么:
russian
['russian', 'english', 'spanish', 'french', 'korean']
['Korean']
english
['russian', 'english', 'spanish', 'french']
['Korean', 'French']
spanish
['russian', 'english', 'spanish']
['Korean', 'French', 'Spanish']
所以 A 向前移動,然后它不能在回圈中繼續
uj5u.com熱心網友回復:
您在這里所做的是在處理串列時更改串列的大小,以便一旦您必須在串列中使用西班牙語(第 3 項),您就已經洗掉了法語和韓語,因此一旦您已經洗掉了西班牙語,沒有剩余的專案可以回圈。您可以使用下面的代碼來解決這個問題。
languages = ['russian', 'english', 'spanish', 'french', 'korean']
formatted_languages = []
for a in len(range(languages)):
formatted_languages.append(languages.pop().title())
print(formatted_languages)
這將遍歷串列的長度,它只計算一次,因此不會改變
uj5u.com熱心網友回復:
您沒有獲得完整值的原因是因為您在每次迭代時都縮短了串列。
考慮一下你的回圈中發生了什么:
for a in languages:
formatted_languages.append(languages.pop().title())
當時間a等于串列中的第 3 個元素時,您已經從中洗掉了 3 個元素(包括 的當前值a),因此回圈無法從串列中獲取下一個值并結束。
如果您需要做的只是將串列中的所有字串大寫,您可以這樣做:
formatted_languages = [entry.title() for entry in languages]
您還可以將原始串列設定為 ,[entry.title() for entry in languages]因為您無論如何都要從中彈出值:
languages = [entry.title() for entry in languages]
如果您更喜歡使用類似于您所擁有的 for 回圈,則應該a在回圈中使用該值:
for a in languages:
formatted_languages.append(a.title())
我要指出的是,這里的一些評論和答案建議復制一份清單。
雖然這會起作用,但它不是最佳的,因為這樣做會浪費記憶體,并且如果串列非常大可能會產生影響。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368793.html
