Как объявить массив, используя все элементы другого массива? - PullRequest
0 голосов
/ 13 февраля 2019

Предположим, у меня есть "константа", такая как:

ITEMS = [ "item1", "item2" ]

Теперь я хотел бы создать массив, который содержит все записи ITEMS, а также некоторые другие.

Очевидно,это неправильно:

more_things = [ "all", ITEMS ]

, поскольку это поместит весь массив в новый массив.Но я хочу, чтобы новый массив в конце содержал [ "all", "item1", "item2" ].

Конечно, я мог бы как-то итерировать первый массив, но мне интересно, есть ли более идиоматический способ с одним вкладышем сделать это.В идеале это должно работать для python2 и python3.

Ответы [ 5 ]

0 голосов
/ 13 февраля 2019

Я предложу еще один очевидный подход: list.insert.

ITEMS.insert(0, 'all')
ITEMS
# ['all', 'item1', 'item2']

Он изменяет ITEMS на месте.


Есливы не хотите изменять ITEMS, вы можете создать копию ... хотя в этот момент вы бы предпочли один из более простых вариантов, таких как повторяющаяся распаковка (*) ...

ITEMS2 = ITEMS.copy()
ITEMS2.insert(0, 'all')

ITEMS2
# ['all', 'item1', 'item2']
0 голосов
/ 13 февраля 2019

Вы также можете использовать itertools.chain

from itertools import chain

more_things = list(chain(more_things, ITEMS))

, это полезно, когда вы хотите добавить более двух списков вместе.

0 голосов
/ 13 февраля 2019

Если вы используете Python 3.5+, наиболее близким к вашему запросу является использование распаковка :

>>> ITEMS = ['item1', 'item2']
>>> ['all', *ITEMS]
['all', 'item1', 'item2']

В более ранних версиях конкатенация списка делала бы то же самое:

>>> ITEMS = ['item1', 'item2']
>>> ['all'] + ITEMS
['all', 'item1', 'item2']

Если вам просто нужен повторяемый (т.е. не обязательно список), использование itertools.chain() может быть более эффективным:

from itertools import chain
more_things = chain(['all'], ITEMS)  # or wrap in list() to get a list
0 голосов
/ 13 февраля 2019

В Python 3 вы можете сделать:

ITEMS = [ "item1", "item2" ]
more_things = [ "all", *ITEMS ]

Это достаточно гибко, поскольку позволяет объединять несколько списков (или итераций в целом) и элементы в одну строку:

even_more_things = [ "all", *ITEMS, "the", *ITEMS, "items" ]
0 голосов
/ 13 февраля 2019

Просто объедините их с +:

more_things = ["all"] + ITEMS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...