[英]What's wrong with this python code? (beginner's question)
這段代碼有什么問題? 我一定錯過了一些微不足道的東西。 每次我嘗試運行它時,它都會有一段時間什么都不做,然后輸出“Killed”。 我希望它獲取列表中的每個元素,將“x”添加到它,然后將 append 這個新元素添加到列表中,這樣 output 將如下所示:
['a', 'b', 'c', 'd', 'ax', 'bx', 'cx', 'dx']
到目前為止我的代碼:
list = ['a', 'b', 'c', 'd']
for element in list:
element = element + "x"
list.append(element)
print(list)
當您遍歷它時,您將附加到您的列表中,因此每次您向前邁出“一步”時,您都會添加另一個“步驟”以便稍后采取,因此您最終會得到['a', 'b', 'c', 'd', 'ax', 'bx', 'cx', 'dx', 'axx', 'bxx'...]
。 出於與此類似的許多原因,一般規則是您應該避免在迭代列表時修改列表。
試試這個
list_1 = ['a', 'b', 'c', 'd']
list_2 = [elem + 'x' for elem in list_1]
result = list_1 + list_2
print(result)
list = ['a', 'b', 'c', 'd']
list2 = []
for element in list:
list2.append(element + "x")
list.extend(list2)
print(list)
由於您在循環中附加,因此您曾經得到 memory 錯誤。 上面的代碼可能會對你有所幫助。
附加到 list2 后,我只是將其添加到原始 list1 中,並得到了所需的結果。
list1 = ['a', 'b', 'c', 'd']
list2 = []
for x in list1:
list2.append(x+'x')
print(list1+list2)
這段代碼有什么問題? 答案是您創建了一個無限循環,因為您在迭代時不斷地將元素添加到列表中。
一種更簡潔的方法是使用extend
所以你可以做這樣的事情:
l = ['a','b','c','d'] # DO NOT USE list as a variable name, it is a keyword in python
l.extend([element + 'x' for element in l])
print(l)
此外,您的代碼不起作用的原因是因為您實際上是在創建一個無限循環,因為您的循環不斷將元素添加到您正在迭代的列表中。
以我上面提到的方式使用擴展,將創建一個包含新項目的臨時列表,然后將臨時列表中的每個項目添加到實際列表中。
不要使用list
,它是一個關鍵字(例如,請參閱我在第 2 行中使用的副本 function)
您在迭代時附加到列表,因此這將導致無限循環
base_list = ['a', 'b', 'c', 'd']
new_list = list.copy(base_list)
for element in base_list:
newelement = element + 'x'
new_list.append(newelement)
print(new_list)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.