如何将一个列表的元素以相同顺序插入到另一个列表中?

时间:2020-04-03 15:08:31

标签: python list indexing insert list-comprehension

比方说,我有一个水果列表,我想将该列表的元素插入另一个列表。使用列表理解,我将得到一个类似于以下代码:

fruit = ["apple", "orange", "banana", "peach"]

my_list = []

[my_list.insert(0, i) for i in fruit]

print(my_list)

这将返回:

['peach', 'banana', 'orange', 'apple']

但是,我希望元素与原始列表的排列顺序相同。 我的想法只是像这样扭转它:

[my_list.insert(-1, i) for i in fruit]

但是无论出于什么原因,它都会返回:

['orange', 'banana', 'peach', 'apple']

有人可以解释为什么为什么以奇数顺序使用索引[-1]吗?我怎么能达到原来的订单?

编辑:

我忘记补充一点,我正在寻找一种将列表元素插入列表开头的方法,因此添加

的元素
more_fruit = ["pear", "pineapple", "coconut"]

my_list = ["apple", "orange", "banana", "peach"]

应该导致

my_list = ["pear", "pineapple", "coconut", "apple", "orange", "banana", "peach"]

4 个答案:

答案 0 :(得分:1)

插入索引是元素在插入后 具有的索引。您真正尝试的是:

[my_list.insert(len(my_list), i) for i in fruit]

my_list转换为预期的副本。 使用-1作为插入索引会在最后一个元素之前插入 ,这对于第一个元素无效,因为尚无最后一个元素在前,因此顺序很奇怪。

话虽如此,如果您不使用结果列表,那么您真的不应该将comperehensions用于副作用。请注意,[my_list.insert(-1, i) for i in fruit]实际上会返回[None, None, None, None]

有更好的方法来实现这种浅表副本:

my_list.extend(fruit)
my_list = fruit[:]
my_list = [f for f in fruit]

仅举几例。

答案 1 :(得分:1)

  1. 如果要将新项目添加到列表的末尾,可以使用append代替insert
  2. 您将版本与-1进行“混合”排序的原因是,将其插入-1位置会将元素放在列表内的“最后一个元素”旁边。
  3. li>

因此,如果您有列表["a", "b"],并将"c"插入-1的位置-您的新列表将为["a", "c", "b"]

关于您的代码-您可以使用:

[my_list.append(x) for x in fruit]

甚至更好:

my_list = fruit[::]

fruit的项目复制到my_list

答案 2 :(得分:1)

使用list.index()返回元素的索引,如果您知道原始列表中元素的索引,则可以完全插入原始列表。

fruit = ["apple", "orange", "banana", "peach"]

my_list = []

[my_list.insert(fruit.index(i),i) for i in fruit]

print(my_list)

输出为:

原始列表水果:['苹果','橙色','香蕉','桃子']

和my_list:

['apple', 'orange', 'banana', 'peach']

答案 3 :(得分:1)

通常不建议在列表理解中使用“副作用”,也不建议使用它们代替for循环。您可以使用简单的下标将列表插入另一个列表:

more_fruit = ["pear", "pineapple", "coconut"]
my_list    = ["apple", "orange", "banana", "peach"]

my_list[0:0] = more_fruit

输出:

print(my_list)

# ['pear', 'pineapple', 'coconut', 'apple', 'orange', 'banana', 'peach']

注意:下标是对列表中某些元素(单个元素或一系列元素)的引用。在这种情况下,我们将替换从位置0开始包含零个元素的一系列元素。