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

将元组列表成对组合成特定长度的新元组列表

将元组列表成对组合成特定长度的新元组列表

青春有我 2022-07-19 16:39:40
我对 Python 很陌生。我正在尝试将两个元组列表成对组合成一个元组列表,其中元组具有定义的长度(假设为 8):例如,输入:x = [(0,1,2,3),(4,5,6,7),(8,9,10,11)]y = [('a','b','c','d'),('e','f','g','h'),('i','j','k','l')]输出:[('a', 0, 'b', 1, 'c', 2, 'd', 3), ('e', 4, 'f', 5,'g', 6, 'h', 7), ('i', 8, 'j', 9, 'k', 10, 'l', 11)]我尝试了几个不同的循环,尝试连接成对组合元组,然后将它们添加到给定的长度,但没有运气。见下文。new = []for n in range(len(x)):    for p in range(len(x[n])):        if p == len(x[n])-1:            new += [(x[n][p],y[n][p])]            for v in range(len(x[n])):                newer += new[v]        else:            new += [(x[n][p],y[n][p])]上面的“较新”列表没有用,但“新”列表提供了我正在寻找的元组的成对组合,就像我相信 merge() 一样,至少。[('a', 0),('b', 1),('c', 2),('d', 3),('e', 4),('f', 5),('g', 6),('h', 7),('i', 8) ('j', 9),('k', 10), ('l', 11)]我在想我可以制作一种读取所需长度(在本例中为四个)并连接选择的窗口,但无法使其正常工作。欢迎任何其他解决方案。
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

使用缓冲区:


b = [None] * 8

[tuple(b) for b[::2], b[1::2] in zip(y, x)]


查看完整回答
反对 回复 2022-07-19
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

(代表问题作者发布解决方案,将其移至答案空间)。


我最终得到了一些工作:


final_list = []

for outer in range(len(a)):

    for ele in range(len(a[outer])):

        if ele == 0:

           slice_start = 0

        else: 

           slice_start += len(b[ele-1])

           slice_end = len(b[ele])+slice_start

           capture = [target for sublist in a[slice_start:slice_end] for target in sublist]

           final_list.append(capture)

final_list = final_list[:len(a)]

绝对不如 heap_overflow 的答案漂亮。


查看完整回答
反对 回复 2022-07-19
?
米脂

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

首先将您的子列表压缩到匹配对的列表中:


pair_list = [list(zip(a, b)) for a, b in zip(x, y) ]

结果:


[[(0, 'a'), (1, 'b'), (2, 'c'), (4, 'd')],

 [(5, 'e'), (6, 'f'), (7, 'g'), (8, 'h')],

 [(9, 'i'), (10, 'j'), (11, 'k'), (12, 'l')]]

现在,简单地展平内部列表。您可以将简单的展平视为“学生练习”,好吗?


查看完整回答
反对 回复 2022-07-19
  • 3 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号