为了账号安全,请及时绑定邮箱和手机立即绑定

合并两个列表中的元素

合并两个列表中的元素

狐的传说 2021-11-16 16:43:06
我想以一种特殊的方式合并python中的两个数组。我的输出数组的奇数索引的out条目应该是我的第一个输入数组的对应条目in0。具有偶数索引的条目out应是我的第二个输入数组的对应条目 in1。in0,in1并且out都是相同的长度。例子:输入数组in0 = [0, 1, 2, 3] in1 = [4, 5, 6, 7]应合并到输出数组out = [0, 5, 2, 7]有没有比循环输入的整个长度并out“手动”填充我的更好的方法?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

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

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


查看完整回答
反对 回复 2021-11-16
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

如果您乐于制作完整的列表副本,那么切片很简单:


>>> in0 = [0, 1, 2, 3]

>>> in1 = [4, 5, 6, 7]

>>> out = in0[:]

>>> out[1::2] = in1[1::2]

>>> out

[0, 5, 2, 7]


查看完整回答
反对 回复 2021-11-16
?
萧十郎

TA贡献1815条经验 获得超13个赞

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


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]]


查看完整回答
反对 回复 2021-11-16
  • 3 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信