list extend()to index,不仅将list元素插入到结尾

mwc*_*wcz 26 python list insert

我正在寻找实现list extend函数版本的最pythonic方法,它扩展到给定的索引而不是列表的末尾.

a_list = [ "I", "rad", "list" ]                                                       
b_list = [ "am", "a" ]
a_list.my_extend( b_list, 1 ) # insert the items from b_list into a_list at index 1

print( a_list ) # would output: ['I', 'am', 'a', 'rad', 'list']
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有建立新列表的情况下这样做?

a_list = [ "I", "rad", "list" ]
b_list = [ "am", "a" ]
c_list = []

c_list.extend( a_list[:1] )
c_list.extend( b_list     )
c_list.extend( a_list[1:] )

print( c_list ) # outputs: ['I', 'am', 'a', 'rad', 'list']
Run Code Online (Sandbox Code Playgroud)

这种方法实际上并不是那么糟糕,但我预感到它可能会更容易.可以吗?

Dav*_*d Z 59

当然,您可以使用切片索引:

a_list[1:1] = b_list
Run Code Online (Sandbox Code Playgroud)

为了演示通用算法,如果要my_extend在假设的自定义list类中实现该函数,它将如下所示:

def my_extend(self, other_list, index):
    self[index:index] = other_list
Run Code Online (Sandbox Code Playgroud)

但实际上并没有使它成为一个函数,只需在需要时使用切片表示法.

  • 我不知道,一旦你习惯了切片符号,我认为这是显而易见的.希望`the_list [i:j] = other_list`对于`i <j`是有意义的,这是因为`j - i`从上面接近零所发生的事情的自然限制.现在,如果我们讨论的情况是`i> j`(比如`the_list [5:3] = other_list`)那么我肯定会同意它应该发生什么并不直观明显,但我认为实际上并不是这样的语法无论如何都有效. (4认同)
  • 虽然我喜欢这个解决方案,但我认为它稍微违背了Python的原则,因为它不会立即明显会发生什么(不是你的错).我希望有延伸的可选参数...... (3认同)
  • 哈,我就知道了!我从来没想过要尝试一下;我只是假设它将整个 `b_list` 放入索引 1 处的 `a_list` 中,而不是 `b_list` 的元素。我显然需要回顾一下切片的复杂性。非常感谢。 (2认同)