合并两个列表中的元素

use*_*453 4 python arrays list

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

in0,in1并且out都是相同的长度.

例:

输入数组

in0 = [0, 1, 2, 3]
in1 = [4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

应合并到输出数组

out = [0, 5, 2, 7]
Run Code Online (Sandbox Code Playgroud)

是否有一种更好的方式,而不是循环输入的整个长度并填充我的out'手工'?

yat*_*atu 10

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

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

  • 同样的想法可以更简洁地写成`[x [i%2]表示i,x表示枚举(zip(in0,in1))]`. (3认同)

Chr*_*nds 7

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

>>> in0 = [0, 1, 2, 3]
>>> in1 = [4, 5, 6, 7]
>>> out = in0[:]
>>> out[1::2] = in1[1::2]
>>> out
[0, 5, 2, 7]
Run Code Online (Sandbox Code Playgroud)


che*_*ner 5

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

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]))]
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  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)).
    
    Run Code Online (Sandbox Code Playgroud)
  4. 列表推导从每个元组中获取正确的元素。

最后,列表推导式是一个通用版本

[(0,4)[0], (1,5)[1], (2,6)[0], (3,7)[1]]
Run Code Online (Sandbox Code Playgroud)