如何使用另一个数组的所有元素声明一个数组?

时间:2019-02-13 09:53:41

标签: python arrays list

假设我有一个“常数”,例如:

ITEMS = [ "item1", "item2" ]

现在,我想创建一个包含ITEMS的所有条目以及其他条目的数组。

显然,这是错误的:

more_things = [ "all", ITEMS ]

,因为它将整个数组放入新数组。但我希望新数组最后包含[ "all", "item1", "item2" ]

当然,我可以以某种方式迭代第一个数组,但是我想知道是否还有一种更惯用的线性方法来执行此操作。理想情况下,它应该适用于python2和python3。

5 个答案:

答案 0 :(得分:2)

只需将它们与+串联:

more_things = ["all"] + ITEMS

答案 1 :(得分:2)

如果您运行的是Python 3.5+,则最接近您的请求的地方是使用unpacking

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

在早期版本中,列表串联将执行以下操作:

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

如果您只需要一个 iterable (即不一定是列表),则使用itertools.chain()可能会更有效:

from itertools import chain
more_things = chain(['all'], ITEMS)  # or wrap in list() to get a list

答案 2 :(得分:1)

在Python 3中,您可以执行以下操作:

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

这是非常灵活的,因为它使您可以将多个列表(或一般的可迭代对象)和元素合并在一行中:

even_more_things = [ "all", *ITEMS, "the", *ITEMS, "items" ]

答案 3 :(得分:1)

我建议一种更明显的方法:list.insert

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

它就地修改了ITEMS


如果您不想修改ITEMS,则可以创建一个副本...尽管此时,您还是希望使用更简单的选项之一,例如可迭代解包(*)。 ..

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

ITEMS2
# ['all', 'item1', 'item2']

答案 4 :(得分:0)

您也可以使用itertools.chain

from itertools import chain

more_things = list(chain(more_things, ITEMS))

当您要添加两个以上的列表时,此功能很有用。