我认为我有一个相当简单的问题,然而,它让我感到难过。
我需要做的就是在列表中插入一些内容:
list = ["apples", "oranges", "more apples"]
list.insert(10, "pears")
没有导致这个:
["apples", "oranges", "more apples", "pears"]
索引4到9需要有许多空格,就像Lua或Ruby中的nil值一样。我可以使用for循环来填补空白,但是,我将无法迭代它并插入列表的开头(因为它会将其他所有内容推到一边)。任何想法都表示赞赏!
答案 0 :(得分:1)
您需要填充列表。
def padded_insert(lst, at_idx, value):
if len(lst) <= at_idx:
npads = at_idx - len(lst) + 1
lst += [ None ] * npads # or '' or 0 or whatever...
lst[at_idx] = value
答案 1 :(得分:1)
您是否考虑过切换到字典并使用索引作为密钥?
dict = {1: 'apples',
2: 'oranges',
3: 'more apples'}
dict[10] = 'pears'
所以dict将是:
{1: 'apples', 2: 'oranges', 3: 'more apples', 10: 'pears'}
恕我直言,我认为你不需要一份清单来实现你的目的。
答案 2 :(得分:0)
这里:
def insert_with_pad(arr, index, val):
if len(arr) <= index:
pad_length = index - len(arr)
arr = arr + ['' for i in range(pad_length)] + [val]
else:
# No need to pad
arr[index] = val
return arr
输入:
insert_with_pad(['a', 'b'], 3, 'w')
输出:
['a', 'b', '', 'w']
答案 3 :(得分:0)
我为此做的一个小功能:
def insert(item, pos, lst):
if pos > len(lst):
return lst+[None]*(pos-len(lst))+[item]
else:
lst.insert(pos, item)
return lst
但是对于一行你可以使用的东西:
pos = 10
item = pears
lst += [None]*(pos-len(lst))+[item]
仅在索引大于列表长度时才有效。 或者这样做的一种混乱方式是:
if pos>len(lst): lst+=[None]*(pos-len(lst))+[item]
else: lst.insert(pos, item)