通过放置一个列表中的每个第n个项目和另一个列表中的其他项目来合并Python中的列表?

ofn*_*ere 11 python merge list python-2.7

我有两个清单,list1list2.

在这里len(list2) << len(list1).

现在我想合并两个列表,使得最终列表的每个第n个元素来自list2,而其他list1元素来自.

例如:

list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

list2 = ['x', 'y']

n = 3
Run Code Online (Sandbox Code Playgroud)

现在最后的清单应该是:

['a', 'b', 'x', 'c', 'd', 'y', 'e', 'f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最恐怖的方法是什么?

我想将所有元素添加list2到最终列表中,最终列表应包含来自list1和的所有元素list2.

Mik*_*ler 10

使较大的列表成为迭代器可以轻松地为较小列表的每个元素获取多个元素:

list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
list2 = ['x', 'y'] 
n = 3

iter1 = iter(list1)
res = []
for x in list2:
    res.extend([next(iter1) for _ in range(n - 1)])
    res.append(x)
res.extend(iter1)

>>> res
['a', 'b', 'x', 'c', 'd', 'y', 'e', 'f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)

这避免了insert对于大型列表而言可能是昂贵的,因为每次需要重新创建整个列表.

  • Python 3.总是使用`next(obj)`因为它适用于Python 2**和**3. (8认同)
  • 只是好奇,有什么理由不使用`iter1.next()`而更喜欢`next(iter1)`呢? (2认同)

deb*_*ges 7

要保留原始列表,可以尝试以下操作:

result = copy.deepcopy(list1)
index = n - 1
for elem in list2:
    result.insert(index, elem)
    index += n
Run Code Online (Sandbox Code Playgroud)

结果

['a', 'b', 'x', 'c', 'd', 'y', 'e', 'f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)