在Python中,与R的c()函数相对应的函数是什么?

4
无论何时我尝试在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中可以进行类似的操作?


1
R语言中的数组和向量类型与Python列表非常不同。 - juanpa.arrivillaga
也许在Python中添加为什么要这样做的上下文可以帮助找到正确的表达方式。此外,请注意Python和R使用不同的索引。Python从0(第一个元素)开始,而R从1(第一个元素)开始。 - daniel_hck
2个回答

5

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
在Python中,将项目添加到列表的正确方法是使用append。
mylist.append(element)

否则,您可以使用列表推导式来生成一个由None或空字符串组成的列表:
mylist= [None for i in range(100)]

这将生成一个包含100个None的列表。然后您可以通过索引进行赋值:
mylist[2] = 4

这实际上并没有回答所发布的问题。 - b_c
1
是的,忘记了最后一部分。 - paltaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接