【问题标题】:Merge a list of tuples element wise and transform it to a list of lists明智地合并元组列表并将其转换为列表列表
【发布时间】:2020-10-10 01:54:03
【问题描述】:

我有一个结果列表,如下所示:

list_results=[([{"A"}], [], [], [1]), ([{"B"}], [], [23], []), ([{"C"}], [55], [], []), ([{"D"}], [422], [], [])] # a list of 4 tuples

我想明智地合并每个元组元素并得到以下结果:

merged_list=[[{"A"}, {"B"}, {"C"}, {"D"}], [55, 422], [23], [1]] # a list of lists

list1=merged_list[0] #[{"A"}, {"B"}, {"C"}, {"D"}]
list2=merged_list[1] #[55, 422]
list3=merged_list[2] #[23]
list4=merged_list[3] #[1]

(可选)请提出代码和时间高效的解决方案,因为此转换将包括超过 4 个元组(即 100,000 个元组)

提前感谢您的帮助。

【问题讨论】:

  • 我认为您的第一个元素丢失了'D'
  • @CoryKramer 是的,忘记了????

标签: python list merge tuples


【解决方案1】:

您可以将列表元素zip 放在一起,并使用itertools 在列表理解中链接/展平结果。

>>> import itertools
>>> [list(itertools.chain.from_iterable(i)) for i in zip(*list_results)]
[[{'A'}, {'B'}, {'C'}, {'D'}], [55, 422], [23], [1]]

【讨论】:

  • 科里非常感谢您的回答。由于您的解决方案稍微快一点,因此它被接受了。正如我所提到的,我需要代码和时间高效的解决方案,而您的解决方案更快。再次感谢您的帮助!
【解决方案2】:

你可以使用chain.from_iterable():

from itertools import chain

merged_list = list(map(list, map(chain.from_iterable, zip(*list_results))))

【讨论】:

  • Olvin 非常感谢您的回答。即使它工作得很好,我也会接受 Cory 的回答(下一个),因为它产生的结果稍微快一些。再次感谢您并感谢您的帮助!
【解决方案3】:
def merge(ls):
    result=[]
    ls0=[]
    ls1=[]
    ls2=[]
    ls3=[]
    for index in range(len(ls)):
        ls0.append(ls[index][0][0])
        try:
            ls1.append(ls[index][1][0])
        except:
            pass
        try:
            ls2.append(ls[index][2][0])
        except:
            pass
        try:
            ls3.append(ls[index][3][0])
        except:
            pass
    result.append(ls0)
    result.append(ls1)
    result.append(ls2)
    result.append(ls3)
    return result

希望它对你有用。

不使用 itertools

  • 建立4个列表
  • try except 只是为了避免追加空项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2015-12-03
    • 2018-12-19
    • 2012-06-05
    • 1970-01-01
    • 2023-03-11
    • 2022-09-27
    相关资源
    最近更新 更多