合并两个列表中的元素

时间:2019-02-22 16:07:15

标签: python arrays list

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

in0in1out的长度都相同。

示例:

输入数组

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

应合并到输出数组

out = [0, 5, 2, 7]

有没有比遍历输入的整个长度并手动填充out更好的方法了?

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:7)

如果您愿意制作完整列表副本,可以通过切片操作轻松实现:

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

答案 2 :(得分: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]]

答案 3 :(得分: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]