我有两个列表:Python的两个列表名单洗牌
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
我需要这样的:
c = [1, 5, 2, 6, 3, 7, 4, 8]
我使用此解决方案:
c = list(reduce(lambda x, y: x + y, zip(a, b)))
是否有更好的方法来做到这一点?
我有两个列表:Python的两个列表名单洗牌
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
我需要这样的:
c = [1, 5, 2, 6, 3, 7, 4, 8]
我使用此解决方案:
c = list(reduce(lambda x, y: x + y, zip(a, b)))
是否有更好的方法来做到这一点?
使用列表综合:
>>> [x for tup in zip(a, b) for x in tup]
[1, 5, 2, 6, 3, 7, 4, 8]
以上嵌套列表理解为等同于下面的嵌套的循环(万一你感到困惑):
result = []
for tup in zip(a, b):
for x in tup:
result.append(x)
使用chain
:
from itertools import chain, izip
interweaved = list(chain.from_iterable(izip(a, b)))
# [1, 5, 2, 6, 3, 7, 4, 8]
Als o可行:
list(sum(zip(a, b),()))
+1好,但是比列表理解慢吗? –
大概一样,即使在我的机器上也快一点。理解赢得更大的名单。 –
如果你想得到完全的结果,那么“洗牌”不是一个得到的单词,因为它表明随机顺序。如果你想要随机订购,你的例子不是很幸运。请说明,你的意思是哪一个。 – kratenko
@kratenko:你能推荐一个更好的术语来描述这种特殊的混合?我第一次尝试“合并”,但我在这里的搜索给出的答案更接近'总和'。尝试'洗牌'(如洗牌)让我在这里,这正是我所期待的。 –