你如何在python中附加或覆盖列表元素?
我目前正在尝试将我在ruby中工作的函数转换为python,我的ruby代码看起来像这样:
def self.push_array_hash(key,selector,level,array)
(0..array.length).each do |i|
x = array[i]
selector[level] = i+1
if(x.is_a?(Array))
self.push_array_hash(key,selector,level+1,x)
end
self.push_datum("#{key}(#{selector.join(',')})", x)
end
end
我可以将此函数称为:self.push_array_hash(key,Array.new,0,val)
,而无需知道嵌套数组的尺寸。如果selector[level] = i+1
尚不存在,代码selector[level]
可以轻松处理向数组附加元素,如果确实存在则更改level
处的值。
这是红宝石(只有这样才能让每个人都能理解我的目标),对于python。这是我的翻译代码:
def push_list_dict(self, key, selector, level, array):
for i, x in enumerate(array):
selector[level] = i+1
if isinstance(x, (list, set)):
if isinstance(value, set):
value = sorted(value)
self.push_list_dict(key,selector,level+1,x)
self.push_datum(key+"("+",".join(map(str, selector))+")",x)
我这样调用该函数:self.push_array_dict(key,[],0,value)
,但它会在selector[level] = i+1
上中断并给出错误:IndexError: list assignment index out of range
。是否有一种简单的方法可以替代地将值附加到数组或重置值?谢谢,
约书亚
答案 0 :(得分:3)
您可以使用:
selector[level:level+1] = [i+1]
如果selector[level]
已存在,则替换该值。
如果它尚不存在,则附加值。
例如,
In [102]: selector = []
In [103]: selector[0:1] = [100]
In [104]: selector
Out[104]: [100]
In [105]: selector[0:1] = [200]
In [106]: selector
Out[106]: [200]
注意如果索引超出selector
:
In [107]: selector[7:8] = [300]
In [108]: selector
Out[108]: [200, 300]
它不会在该索引位置插入,只是附加。
答案 1 :(得分:1)
Python并没有像ruby那样神奇地扩展数组。一种方法是使用[None] * x
或[0] * x
selector += [None] * (level-len(selector))
selector[level] = i+1
除了:
range
不包含“停止”值,因此您可能不希望-1
存在。通常的方式来写这个
for i in range(0,len(array)-1):
x = array[i]
...
是
for i, x in enumerate(array):
...