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

我对 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)]

我在想我可以制作一种读取所需长度(在本例中为四个)并连接选择的窗口,但无法使其正常工作。


欢迎任何其他解决方案。


青春有我
浏览 187回答 3
3回答

斯蒂芬大帝

使用缓冲区:b = [None] * 8[tuple(b) for b[::2], b[1::2] in zip(y, x)]

芜湖不芜

(代表问题作者发布解决方案,将其移至答案空间)。我最终得到了一些工作: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 的答案漂亮。

米脂

首先将您的子列表压缩到匹配对的列表中: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')]]现在,简单地展平内部列表。您可以将简单的展平视为“学生练习”,好吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python