比方说,我有一个水果列表,我想将该列表的元素插入另一个列表。使用列表理解,我将得到一个类似于以下代码:
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"]
答案 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)
append
代替insert
。-1
进行“混合”排序的原因是,将其插入-1
位置会将元素放在列表内的“最后一个元素”旁边。因此,如果您有列表["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开始包含零个元素的一系列元素。