基本python:如何增加列表中项的值

时间:2013-06-03 18:21:04

标签: python

这是一个简单的问题,我不知道自己做错了什么。基本上我想迭代空列表中的项目,并根据某些标准增加每个项目。这是我正在尝试做的一个例子:

list1 = []
for i in range(5):
    list1[i] = list1[i] + 2*i

此操作因list index out of range错误而失败,我被卡住了。预期的结果(我的目标)是一个带有值的列表:

[0, 2, 4, 6, 8]

更明确一点:我不是在制作那个特定的列表之后。问题是如何以递归方式修改空列表的项目。正如下面的gnibbler所示,初始化列表就是答案。欢呼声。

6 个答案:

答案 0 :(得分:8)

Ruby(例如)允许您分配超出列表末尾的项目。 Python没有 - 你必须像这样初始化list1

list1 = [0] * 5

答案 1 :(得分:6)

因此,当你这样做时,你实际上正在使用我,所以你可以对我进行数学运算,并设置它来做到这一点。当你已经拥有i时,没有必要尝试对列表中的内容进行数学计算。所以只做列表理解:

list1 = [2*i for i in range(5)]

既然你说它更复杂,只是不要使用列表理解,编辑你的for循环:

for i in range(5):
    x = 2*i
    list1[i] = x

通过这种方式,您可以继续操作,直到最终得到您想要的结果,将其存储在变量中并相应地进行设置!你也可以list1.append(x),我实际上更喜欢它,因为它可以用于任何列表,即使它不像range

列表那样有序

编辑:既然你想像你一样操纵数组,我建议使用numpy!有一个名为vectorize的好东西,所以你可以将一个函数应用到一维数组:

import numpy as np
list1 = range(5)
def my_func(x):
    y = x * 2
vfunc = np.vectorize(my_func)
vfunc(list1)
>>> array([0, 2, 4, 6, 8])

我建议仅将其用于更复杂的功能,因为您可以使用numpy broadcasting来轻松地将其乘以2。

答案 2 :(得分:3)

您的列表为空,所以当您尝试读取列表中的元素时(此行的右侧)

list1[i] = list1[i] + 2*i

它不存在,因此您收到错误消息。

答案 3 :(得分:1)

您可能还希望考虑使用numpy。乘法运算被重载以在阵列的每个元素上执行。根据列表的大小以及您计划对其执行的操作,使用numpy可能是最有效的方法。

示例:

>>> import numpy
>>> 2 * numpy.arange(5)
array([0, 2, 4, 6, 8])

答案 4 :(得分:0)

我会改为写

for i in range(5):
    list1.append(2*i)

答案 5 :(得分:0)

另一种方法是在列表中使用append方法。你得到超出范围错误的原因是因为你说:

list1 = []
list1.__getitem__(0) 

然后操作此项 BUT 该项目不存在,因为您创建了一个空列表。

概念证明:

list1 = []
list1[1]
IndexError: list index out of range

但是,我们可以将新的 stuff 添加到此列表中,如下所示:

list1 = []
for i in range(5):
    list1.append(i * 2)