2024-09-28 19:24:27 发布
网友
应该根据值是奇数还是偶数来更改列表的值。 错误:
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])
问题是for i in list_in在列表中产生项,而不是索引。要获取索引,请使用enumerate:
for i in list_in
enumerate
for i, val in enumerate(list_in): if i % 2 == 0: list_in[i] = val * 2 ...
如果您想返回一个新的列表(而不是对旧列表进行变异),那么使用条件表达式的列表理解可以很好地实现:
[val * 3 if val % 2 else val * 2 for val in list_in]
当然,如果您真的需要,您可以将它与切片分配一起使用来变异list_in:
list_in
list_in[:] = [val * 3 if val % 2 else val * 2 for val in list_in]
作为一种风格,如果函数的目的是就地修改列表,则不要返回列表。这就清楚地表明,输入是经过变异的,而不是返回一个以某种方式根据原始数据构建的新列表。
您需要使用enumerate,因为for i in list返回的是元素而不是索引。你知道吗
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
问题是
for i in list_in
在列表中产生项,而不是索引。要获取索引,请使用enumerate
:如果您想返回一个新的列表(而不是对旧列表进行变异),那么使用条件表达式的列表理解可以很好地实现:
当然,如果您真的需要,您可以将它与切片分配一起使用来变异
list_in
:作为一种风格,如果函数的目的是就地修改列表,则不要返回列表。这就清楚地表明,输入是经过变异的,而不是返回一个以某种方式根据原始数据构建的新列表。
您需要使用
enumerate
,因为for i in list
返回的是元素而不是索引。你知道吗相关问题 更多 >
编程相关推荐