按元素合并元组列表并将其转换为列表列表

2024-09-27 07:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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个元组(即100000个元组)

提前感谢您的帮助


Tags: of代码元素列表顺序mergedresultslists
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只是为了避免附加空项

您可以使用^{}

from itertools import chain

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

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

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

相关问题 更多 >

    热门问题