Python基于奇数或偶数的值更改列表元素

时间:2014-09-03 16:29:51

标签: python list

假设根据值是奇数还是偶数来更改列表的值。 错误:

list assignment index out of range 

代码:

def list_mangler(list_in):
    for i in list_in:
        if i % 2 == 0:
            list_in[i] = i * 2
        else:
            list_in[i] = i * 3
    return list_in



list_mangler([1, 2, 3, 4])

2 个答案:

答案 0 :(得分:4)

问题是for i in list_in会在列表中产生,而不是 indices 。要获取索引,请使用enumerate

for i, val in enumerate(list_in):
    if i % 2 == 0:
        list_in[i] = val * 2
    ...

如果你想返回一个 new 列表(而不是改变旧列表),那么带有条件表达式的列表理解可以很好地完成:

[val * 3 if val % 2 else val * 2 for val in list_in]

当然,如果你真的需要,你可以将它与切片分配一起用来改变list_in

list_in[:] = [val * 3 if val % 2 else val * 2 for val in list_in]

作为一种风格,如果您的功能的目的是修改列表,请不要返回列表。这清楚地表明输入是变异的,而不是返回一个新的列表,该列表以某种方式从原始数据构建。

答案 1 :(得分:0)

您需要使用enumerate,因为for i in list会返回元素而不是索引。

for index, val in enumerate(list_in):
        if val % 2 == 0:
            list_in[index] = val* 2
        else:
            list_in[index] = val * 3
    return list_in