当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《通过放置一个列表中的每个第n个项目和另一个列表中的其他项目来合并Python中的列表?》经验,为你挑选了2个好方法。

我有两个清单,list1list2.

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

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

例如:

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

list2 = ['x', 'y']

n = 3

现在最后的清单应该是:

['a', 'b', 'x', 'c', 'd', 'y', 'e', 'f', 'g', 'h']

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

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



1> Mike Müller..:

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

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']

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


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

2> deborah-digg..:

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

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

结果

['a', 'b', 'x', 'c', 'd', 'y', 'e', 'f', 'g', 'h']

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有