我想在python中填充一个数组,以便我可以使用id号来索引数组。并非所有索引都将存在于数组中,并且项目不一定按顺序添加到数组中。最大可能的索引是未知的(或者至少我不想硬编码)。有没有办法在分配时动态增长数组? 我想要像
这样的东西arr = []
for x in xs
arr[x.index] = x
但是这会给出“IndexError:列表赋值索引超出范围”。我尝试使用list.insert()但如果没有按顺序插入项目则不起作用,因为它会更改数组中已有的项目的索引。
有没有一种方法可以在python中执行此操作,或者我是否必须满足于初始化“足够大”的数组?
答案 0 :(得分:7)
您需要dictionary
arr = {}
for x in xs:
arr[x.index] = x
如果你要做的只是建立字典,你可以像这样使用dictionary comprehension
myDict = {x.index:x for x in xs}
答案 1 :(得分:2)
Python数组可以动态增长,但只是分配给索引不会扩展数组。
数组使用extend
方法从集合中一次添加一堆项目。例如:
>>> a = [1, 2, 3]
>>> a.extend([None, None])
>>> a
[1, 2, 3, None, None]
您可以模拟自动扩展数组分配,如下所示:
def arr_assign(arr, key, val):
try:
arr[key] = val
return
except IndexError:
# Do not extend the array for negative indices
# That is ridiculously counterintuitive
assert key >= 0
arr.extend(((key + 1) - len(arr)) * [None])
arr[key] = val
return
例如:
>>> a = []
>>> arr_assign(a, 4, 5)
>>> a
[None, None, None, None, 5]
作为附录,默认情况下具有自动扩展行为的语言(例如Perl,Ruby,PHP,JavaScript,Lua)往往不如Python严格,如果访问插槽,将返回神奇的空值一个不存在的数组。这意味着它们可以在分配给不存在的索引时允许自动扩展,而不会更改任何其他索引处的数组行为。
E.g。在Ruby a[2]
中,尽管a
已在其下方发生了变化,但不会发生变化。
irb(main):006:0> a = []
=> []
irb(main):007:0> a[2]
=> nil
irb(main):008:0> a[4] = 7
=> 7
irb(main):009:0> a
=> [nil, nil, nil, nil, 7]
irb(main):010:0> a[2]
=> nil
答案 2 :(得分:0)
x = []
ch=int(input("How many values you want to add in an array"))
for i in range(ch):
z=int(input("Enter value for array"))
x.append(z) #now u r pushing value of Z entered by you at run time
print(x)
答案 3 :(得分:-1)
只需使用arr.append(x)
即可添加元素。
答案 4 :(得分:-1)
为什么不尝试附加清单?
arr = []
for x in xs
arr.append(x)
然后访问arr as:arr [0],arr [1]等等..