当index>时,Python插入到列表中LEN(名单)

时间:2017-07-20 12:39:12

标签: python

我认为我有一个相当简单的问题,然而,它让我感到难过。

我需要做的就是在列表中插入一些内容:

list = ["apples", "oranges", "more apples"]
list.insert(10, "pears")

没有导致这个:

["apples", "oranges", "more apples", "pears"]

索引4到9需要有许多空格,就像Lua或Ruby中的nil值一样。我可以使用for循环来填补空白,但是,我将无法迭代它并插入列表的开头(因为它会将其他所有内容推到一边)。任何想法都表示赞赏!

4 个答案:

答案 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)