合并两个列表中的元素

问题描述 投票:4回答:4

我想以特殊的方式在python中合并两个数组。具有奇数索引的输出数组out的条目应该是我的第一个输入数组in0的相应条目。在out中具有偶数索引的条目应该是我的第二个输入数组in1的相应条目。

in0in1out的长度都相同。

例:

输入数组

in0 = [0, 1, 2, 3]
in1 = [4, 5, 6, 7]

应合并到输出数组

out = [0, 5, 2, 7]

有没有比循环输入整个长度更好的方法并用手填充我的out

python arrays list
4个回答
10
投票

您可以使用列表推导并从偶数索引中的in0和奇数索引上的in1中选择值:

[in0[i] if i % 2 == 0 else in1[i] for i in range(len(in0))]
# [0, 5, 2, 7]

7
投票

如果您很乐意制作完整列表副本,切片很简单:

>>> in0 = [0, 1, 2, 3]
>>> in1 = [4, 5, 6, 7]
>>> out = in0[:]
>>> out[1::2] = in1[1::2]
>>> out
[0, 5, 2, 7]

4
投票

如果你不介意一些冗长......

from itertools import cycle

in0 = [0, 1, 2, 3]
in1 = [4, 5, 6, 7]

out = [pair[i] for pair, i in zip(zip(in0, in1), cycle([0,1]))]

这个怎么运作:

  1. zip(in0, in1)是一系列元组,(0,4), (1,5), (2,6), (3,7)
  2. cycle([0,1])是交替的0和1的循环流,用作步骤1中元组的索引。
  3. zip(zip(...), cycle(...))产生一对元组和索引: (0, (0,4)), (1, (1,5)), (0, (2,6)), (1, (3,7)).
  4. 列表理解从每个元组中获取正确的元素。

最后,列表理解是一般的版本

[(0,4)[0], (1,5)[1], (2,6)[0], (3,7)[1]]

1
投票

不使用循环,但不是您所请求的完全相同的顺序:

>> in0 = [0, 1, 2, 3]
>> in1 = [4, 5, 6, 7]
>> out = in0[0::2] + in1[1::2]
>> out
[0, 2, 5, 7]

编辑:使用itertools更正输出顺序:

>> import itertools
>> in0 = [0, 1, 2, 3]
>> in1 = [4, 5, 6, 7]
>> out = list(itertools.chain(*zip(in0[0::2], in1[1::2])))
>> out
[0, 5, 2, 7]
© www.soinside.com 2019 - 2024. All rights reserved.