首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python将列表重塑为多维列表

Python将列表重塑为多维列表
EN

Stack Overflow用户
提问于 2018-08-27 03:43:19
回答 3查看 2.8K关注 0票数 5

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

代码语言:javascript
复制
list1=[[2,3,4],[1],[77,8,27,12],[25,15]]

我有另一个元素数量相同的列表,如下所示:

代码语言:javascript
复制
list2=[a,b,c,d,e,f,g,h,i,j]

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-27 03:51:52

这是一种可爱的方式。

代码语言:javascript
复制
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']]

我不知道纯粹的理解是否可行。

票数 3
EN

Stack Overflow用户

发布于 2018-08-27 03:51:52

使list1与list2匹配很容易--只需使用itertools.chain.from_iterable(list))flat1 = [elem for sublist in list1 for elem in sublist]或其他各种选项in this question即可。

走另一条路就有点复杂了。但是,与其寻找一行程序,不如显式地完成:在list2上创建一个迭代器,并根据需要从其中提取元素:

代码语言:javascript
复制
def zipstructured(list1, list2):
    iter2 = iter(list2)
    for sublist1 in list1:
        sublist2 = list(itertools.islice(iter2, len(sublist1)))
        yield sublist1, sublist2

现在你可以这样做了:

代码语言:javascript
复制
>>> list1=[[2,3,4],[1],[77,8,27,12],[25,15]]
>>> list2=['a','b','c','d','e','f','g','h','i','j']
>>> for sub1, sub2 in zipstructured(list1, list2):
...     print(sub1, sub2)
[2, 3, 4] ['a', 'b', 'c']
[1] ['d']
[77, 8, 27, 12] ['e', 'f', 'g', 'h']
[25, 15] ['i', 'j']
票数 3
EN

Stack Overflow用户

发布于 2018-08-27 04:00:51

如果你想在一个循环中处理它们,你可以这样做:

代码语言:javascript
复制
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)

结果:

代码语言:javascript
复制
([2, 3, 4], ['a', 'b', 'c'])
([1], ['d'])
([77, 8, 27, 12], ['e', 'f', 'g', 'h'])
([25, 15], ['i', 'j'])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52029708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档