【问题标题】:Combining two Python lists in an interleaved manner以交错方式组合两个 Python 列表
【发布时间】:2016-03-01 21:29:37
【问题描述】:

我想交错两个列表。例如:

arr1 = [1,2,3,4,5,6]
arr2 = [9,8,7,6]

我不喜欢这样的输出

[1,9,2,8,3,7,4,6,5,6]

我创建了以下脚本,但由于某种原因它无法正常工作:

arr1 = [1,2,3,4,5,6]
arr2 = [9,8,7,6]
x = 0

for a in arr2:
    x = x + 2
    arr1.insert(x, a)

我哪里出错了?我不是在寻找随机洗牌。我正在使用 python2.x

【问题讨论】:

  • 那些是set 不是数组
  • "我能得到像 {1,9,2,8,3,7,4,6​​,5,6} 这样的输出吗" - 你不能得到一个包含重复元素的集合,也许你意思是list?
  • 而一个集合没有顺序的概念......所以你不能......你需要一个集合还是你想要一个列表?
  • 谢谢,我已经编辑了这个问题。 @user3100115
  • @BrianCain 我已经改变了我的问题,请原谅我,但我是新手。

标签: python list python-2.x


【解决方案1】:

您可以使用itertools 模块中的zip_longestchain.from_iterable

>>> arr1 = [1,2,3,4,5,6]
>>> arr2 = [9,8,7,6]
>>> from itertools import chain, zip_longest
>>> [i for i in chain.from_iterable(zip_longest(arr1, arr2)) if i is not None]
[1, 9, 2, 8, 3, 7, 4, 6, 5, 6]

你需要在 python-2.x 中使用izip_longest 而不是zip_longest

【讨论】:

  • 或者,如果您不想处理标记值并且希望处理任意数量的可迭代作为输入,那么您想要获取并使用来自@987654322 的roundrobin 配方@
【解决方案2】:

如果您真的想以随机方式随机播放它们,关键是将它们组合成一个列表并使用 shuffle()。

from random import shuffle
import itertools as it

arr1 = [1,2,3,4,5,6]
arr2 = [9,8,7,6]
x = list(it.chain(arr1,arr2))
shuffle(x)
print(x)

EDIT 问题已更新,以反映所需的顺序不是随机的。

【讨论】:

  • 我正要发布一个简单的lst3 = arr1+arr2; random.shuffle(lst3),但整个事情以一种奇怪的方式演变......:D
【解决方案3】:

我想出了一种不同的方法来做到这一点,而无需导入。

mylist = []
a = [1,2,3,4,5,6]
b = [9,8,7,6]
for x in range(max(len(a), len(b))):
    if x < len(a):
        mylist.append(a[x])
    if x < len(b):
        mylist.append(b[x])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2020-07-09
    相关资源
    最近更新 更多