一个接一个地合并两个列表

时间:2018-12-05 19:11:12

标签: python

我正在尝试合并列表以产生如下结果: [a,1,b,2,c,3]但我无法使它正常工作。您能告诉我怎么了吗/告诉我怎么做?

def newList(a, b):
    tmp = []
    tmp.append(zip(a, b))
    return tmp

a = ['a', 'b', 'c']
b = [1, 2, 3]

print(newList(a, b))

结果是,我在0x0449FE18处只能得到一个zip对象。

4 个答案:

答案 0 :(得分:2)

您需要展平zip产生的序列。最简单的方法是使用itertools.chain.from_iterable

>>> from itertools import chain
>>> list(chain.from_iterable(zip(['a', 'b', 'c'], [1,2,3])))
['a', 1, 'b', 2, 'c', 3]

类方法from_iterable采用[('a', 1), ('b', 2), ...]之类的可迭代对象,并通过一次从左到右从子可迭代对象中提取元素,将其变成单个可迭代对象。 / p>

答案 1 :(得分:1)

>>> [x for y in zip(['a', 'b', 'c'],[1, 2, 3]) for x in y]
['a', 1, 'b', 2, 'c', 3]

答案 2 :(得分:0)

无进口

b = [1,2]

a = ['a','b','c']

result = [item for a in map(None, a, b) for item in a][:-1]

['a',1,'b',2,'c']

重要数组“ b”比数组“ a”少一个元素

如果长度相同

result = [item for a in map(None, a, b) for item in a]

['a',1,'b',2,'c',3]

答案 3 :(得分:0)

您不需要使用zip。假设两个列表具有相同数量的元素(就像您的问题一样),您可以做简单的事情

newList = list()
for i in range(len(a)):
    newList.append(a[i])
    newList.append(b[i])
print(newList)

如果列表的大小不同,那么您需要问自己一些关于订购的问题,但是您可以像这样简单

newList = list()
biggestList = len(a) if len(a) > len(b) else len(b)
for i in range(biggestList):
    if a[i]:
        newList.append(a[i])
    if b[i]:
        newList.append(b[i])
print(newList)

您可以使用此逻辑,具体取决于列表大小的标准以及如何处理订单。

相关问题