每当我尝试在python中创建一个空列表时,我就意识到,如果我不知道并定义它的范围,就无法为R中想要的任何索引设置值。
q = list()
q[ 2 ] = 9
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
但是在R中,它不会发生。
Q = c( )
Q[ 4 ] = 3
>>> [1] NA NA 4
我可以在python中做任何等效的操作吗?
答案 0 :(得分:3)
R中的c
函数是将其参数连接为列表的函数。您可以使用+
在Python中连接两个列表。要连接可变数量的列表(如R中的c
一样),可以使用sum
函数。通常,这会加上数字,但是可通过从空列表而不是从0开始“开始”来添加列表:
>>> lists = [[1,2,3], [4,5,6], [7,8,9]]
>>> sum(lists, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
但是,这与代码中的错误无关。问题是在Python中,您只能使用语法mylist[i] = x
在已经存在的索引处设置新值。自创建空列表以来,它没有任何元素,因此索引2超出范围。
如果您希望能够在不一定形成连续范围的任意索引处设置值,则可以使用字典:
>>> q = dict()
>>> q[2] = 9
但是,对于带有一些未设置值的列表,某些操作和您希望它们执行的操作之间将不匹配;例如,len(q)
给出设置的元素数,而不是包括未设置值的序列的长度。
答案 1 :(得分:1)
在python中,将项目添加到列表的正确方法是通过添加。
mylist.append(element)
否则,您可以使用列表推导来生成无或空字符串的列表:
mylist= [None for i in range(100)]
这将生成一个列表,其中包含100个“无”。然后您可以按索引进行分配:
mylist[2] = 4