Dynamically growing a python array when assigning to it
我想在python中填充一个数组,这样我就可以使用ID号索引到数组中。并非所有索引都将存在于数组中,并且不必按顺序将项添加到数组中。最大的可能索引未知(或者至少我不想硬编码它)。分配时是否有动态增长数组的方法?我想要一些像
1 2 3 | arr = [] for x in xs arr[x.index] = x |
但这会导致"indexerror:列表分配索引超出范围"。我尝试使用list.insert(),但是如果项目没有按顺序插入,这就不起作用,因为它会更改数组中已有项目的索引。
在python中是否有一个好的方法可以做到这一点,或者我是否必须满足于初始化数组"足够大"?
你需要一个
1 2 3 | arr = {} for x in xs: arr[x.index] = x |
如果你要做的就是建立字典,你可以这样使用
1 | myDict = {x.index:x for x in xs} |
号
python数组可以动态增长,但是简单地分配给索引并不能扩展数组。
数组具有
1 2 3 4 | >>> a = [1, 2, 3] >>> a.extend([None, None]) >>> a [1, 2, 3, None, None] |
。
您可以这样模拟自动扩展数组分配:
1 2 3 4 5 6 7 8 9 10 11 | 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 |
例如:
1 2 3 4 | >>> a = [] >>> arr_assign(a, 4, 5) >>> a [None, None, None, None, 5] |
。
作为补充,默认情况下具有自动扩展行为的语言(例如Perl、Ruby、PHP、javascript、Lua)往往不如Python严格,并且如果您访问不存在的数组中的槽,将返回不可思议的空值。这意味着,当分配给不存在的索引时,它们可以允许自动扩展,而不必更改任何其他索引处的数组行为。
例如,在Ruby
1 2 3 4 5 6 7 8 9 10 | 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 |
。
1 2 3 4 5 6 | 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) |
你为什么不试着把名单附加上去?
1 2 3 | arr = [] for x in xs arr.append(x) |
然后访问arr:arr[0]、arr[1]等。
只需使用