簡體   English   中英

如何將列表中的每個偶數轉換為奇數

[英]How to convert every even number in a list to odd

我的一個修訂問題是創建一個函數,它將 integer 值列表作為列表,並將每個偶數轉換為奇數。

預期 Output:
integer_list = [1, 2, 3, 4, 5, 6, 7]
之前:[1、2、3、4、5、6、7]
之后:[1、3、3、5、5、7、7]

integer_list = [1, -2, 3, -4, 8, 16, 21, -17]
之前:[1、-2、3、-4、8、16、21、-17]
之后:[1、-3、3、-5、9、17、21、-17]

到目前為止的代碼:

def make_all_odd(integer_list):
    for number in integer_list:
        if (number % 2) == 0:
            number += 1
            integer_list.append(number)

到目前為止,我只發現我需要遍歷列表中的每個元素並檢查它是否甚至使用 for 循環,但我不確定如何修改原始字符串以將識別的偶數更改為奇怪的。 我知道我的代碼只是將最近轉換的偶數添加到列表的末尾,但就我而言,我必須替換,而不是添加。 我首先想到使用 find() 但這不適用於列表

您犯了一個嚴重錯誤:您在迭代列表時正在修改它 不要那樣做。 有時語言或實現會拯救你,但通常你最終會得到奇怪和不正確的結果。

嘗試按索引迭代列表:

for i in range(len(integer_list)):
   # You can read an item from the list:
   val = integer_list[i]

   # And you can overwrite an item in the list:
   integer_list[i] = new_val

(確切的解決方案由您自己提出。)

您可以使用以下語法修改列表: list[index] = whatever you want here 索引從 0 開始。枚舉只允許您在循環時獲取索引,而不是執行list.index(element)

代碼:

使用枚舉:

integer_list = [1, 2, 3 , 4, 5, 6, 7]
def make_all_odd(integer_list):
    for index, number in enumerate(integer_list):
        if (number % 2) == 0:
            integer_list[index] += 1

make_all_odd(integer_list)
print(integer_list)

不使用枚舉(不考慮重復值,所以偶數都必須不同):

integer_list = [1, 2, 3 , 4, 5, 6, 7]
def make_all_odd(integer_list):
    for number in integer_list:
        index = integer_list.index(number)
        if (number % 2) == 0:
            integer_list[index] += 1

make_all_odd(integer_list)
print(integer_list)

在這里,我使用變量來跟蹤索引而不是.index方法,這修復了無法使用重復項的問題。

integer_list = [1, 2, 3 , 4, 5, 6, 7]
index = 0
def make_all_odd(integer_list):
    for number in integer_list:
        index = integer_list.index(number)
        if (number % 2) == 0:
            integer_list[index] += 1
    index+=1

make_all_odd(integer_list)
print(integer_list)

您也可以這樣做返回一個新列表(如果您不希望修改原始列表):

使用枚舉返回新列表:

integer_list = [1, 2, 3 , 4, 5, 6, 7]
def make_all_odd(integer_list):
    integer_list_copy = integer_list.copy() # remember to use .copy(), look at https://stackoverflow.com/questions/2612802/list-changes-unexpectedly-after-assignment-why-is-this-and-how-to-prevent-it 
    for index, number in enumerate(integer_list):
        if (number % 2) == 0:
            integer_list_copy[index] = number + 1
    return integer_list_copy

make_all_odd(integer_list)
print(integer_list)

此外,在迭代列表時不要更改列表。 只會讓大家頭疼。

使用 True/False 數組保持簡單:

import numpy as np
L = [1, 2, 3, 4, 5, 6, 7]
L + (np.mod(L,2)==0)

返回:

array([1, 3, 3, 5, 5, 7, 7])

暫無
暫無

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

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