Python将列表重塑为多维lis

2024-04-26 07:34:59 发布

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

我有一个列表,每个维度都有不同的长度,如下所示:

list1=[[2,3,4],[1],[77,8,27,12],[25,15]]

我还有另一个元素数量相同的列表,比如:

^{pr2}$

我想把我的list2重塑为list1,并在for循环中一起处理两个列表。在


Tags: 元素列表for数量重塑list2list1pr2
3条回答

这是一种可爱的方式。在

list1 = [[2,3,4],[1],[77,8,27,12],[25,15]]
list2 = list("abcdefghij")

list2_iterator = iter(list2)
list2_reshaped = [[next(list2_iterator) for _ in sublist] for sublist in list1]

print(list2_reshaped)

Out: [['a', 'b', 'c'], ['d'], ['e', 'f', 'g', 'h'], ['i', 'j']]

我不知道单纯的理解是否可能。在

如果要在循环中处理它们,只需执行以下操作:

list1=[[2,3,4],[1],[77,8,27,12],[25,15]]

list2=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]

last = 0

for ele in list1:
    print(ele, list2[last : last + len(ele)])
    last += len(ele)

结果:

^{pr2}$

将list1展平以匹配list2很容易,要么使用itertools.chain.from_iterable(list)),要么使用flat1 = [elem for sublist in list1 for elem in sublist],或者其他各种选项in this question。在

走另一条路要复杂一些。但是,与其寻找一行代码,不如显式地执行:在list2上创建一个迭代器,并根据需要从中提取元素:

def zipstructured(list1, list2):
    iter2 = iter(list2)
    for sublist1 in list1:
        sublist2 = list(itertools.islice(iter2, len(sublist1)))
        yield sublist1, sublist2

现在您可以这样做:

^{pr2}$

相关问题 更多 >