假设根据值是奇数还是偶数来更改列表的值。 错误:
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])
答案 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