簡體   English   中英

如何用前 5 個偶數替換 5 個 0 的列表? (Python)

[英]How do you replace a list of 5 0's with the first 5 even numbers? (python)

even_numbers = [0] * 5

for i in range(1,11):
    if i%2 ==0:
        even_numbers[i]=i

我收到錯誤“列表分配索引超出范圍”,盡管我不太確定這意味着什么。

“列表索引超出范圍”基本上意味着您正在嘗試訪問不存在的數組索引。

在您的代碼中,您的循環達到 10,並且您嘗試為even_numbers[10]分配一個數字,而您的數組只有 5 個元素。 基本上你是在告訴你的程序“給我這個 5 元素列表的第 10 個元素”,這沒有多大意義。 在這種情況下,您的索引僅從 0 到 4。

要解決您的問題,請嘗試將當前索引存儲在變量中:

even_numbers = [0] * 5
current_index = 0

for i in range(1,11):
    if i%2 ==0:
        even_numbers[current_index]=i
        current_index += 1

編輯:或者,為什么不使用range()函數的step參數僅循環遍歷偶數元素?

even_numbers = [0] * 5
current_index = 0

#will increment 'i' 2 by 2, i.e. i will be 2, then 4, then 6, ...
for i in range(2,11, 2): 
    even_numbers[i/2]=i
    current_index += 1

該消息意味着您正在嘗試訪問不存在的列表元素。

該列表只有五個索引為 0 到 4 的元素。嘗試為 even_numbers[i] 分配一個值時,您將嘗試為列表的所有元素分配一個 1 到 10 范圍內的值。這就是為什么您應該更改索引到 even_numbers[i/2]

最簡單的解決方案是首先生成偶數列表。

even_numbers = list(range(1,11,2))

如果出於某種原因,您已經擁有該列表,那么如果您只是要替換它們,那么原始內容是什么並不重要。

for i, _ in enumerate(even_numbers):
    even_numbers[i] = 2*i

或者只是even_numbers[:] = range(1, 11, 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM