Как я могу вставить элементы одного списка в другой список в том же порядке? - PullRequest
0 голосов
/ 03 апреля 2020

Допустим, у меня есть список фруктов, и я хочу вставить элементы этого списка в другой список. Используя понимание списка, у меня был бы код, который выглядит следующим образом:

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 ]

1 голос
/ 03 апреля 2020

Обычно не рекомендуется использовать «побочные эффекты» в пределах понимания списка или использовать их вместо a для l oop. Вы можете вставить список в другой список, используя простые подписки, однако:

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

my_list[0:0] = more_fruit

output:

print(my_list)

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

примечание: подстрочный индекс является ссылкой на некоторые элементы в списке, или отдельный элемент или ряд элементов. В этом случае мы заменяем диапазон элементов, содержащих нулевые элементы, начиная с позиции 0.

1 голос
/ 03 апреля 2020
  1. Если вы хотите добавить новый элемент в конец списка, вы можете использовать append вместо insert.
  2. Причина, по которой вы получаете «смешанный» заказ для вашей версии с -1 означает, что вставка в позицию -1 помещает элемент в элемент «рядом с последним» внутри вашего списка.

Так что, если у вас есть список ["a", "b"], и вы вставляете "c" в положение -1 - ваш новый список будет ["a", "c", "b"].

Что касается вашего кода - вы можете использовать:

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

Или даже лучше:

my_list = fruit[::]

, который будет копировать элементы fruit в my_list

1 голос
/ 03 апреля 2020

use list.index () возвращает индекс элемента, если вы знаете индекс элементов в исходном списке, вы можете вставить его точно так же, как и исходный список.

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

my_list = []

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

print(my_list)

вывод is:

оригинальный список фруктов: ['apple', 'orange', 'banana', 'peach']

и my_list:

['apple', 'orange', 'banana', 'peach']
1 голос
/ 03 апреля 2020

Индекс вставки - это индекс, который элемент будет иметь после вставки. То, что вы действительно пытаетесь, это:

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

, что превращает my_list в ожидаемую копию. Использование -1 в качестве индекса вставки вставляет перед последним элементом, который не работает для первого, потому что нет последнего элемента, которому еще предстоит предшествовать, отсюда и странный порядок.

Тем не менее, вы действительно не должны использовать противоречия для побочных эффектов, если вы не используете результирующий список. Обратите внимание, что [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]

Назовите только несколько.

...