首页 > 解决方案 > 如何根据 python3 中元素的值将平面列表转换为列表列表?

问题描述

我有一个清单 arr=[1,-1,4,-1,4,2]

有没有办法将其转换为[[1],[4],[4,2]]?

基本上 -1 表示子列表的结束位置

我试过了

number_of_sublists=arr.count(-1)
lst=[[]]*(number_of_sublists+1)
    
idx=0
for i in arr:
    print(idx)
    if i==-1:
        idx+=1
    else:
        lst[idx].append(i)
print(lst)

但它给了我输出

[[1,4,4,2],[1,4,4,2],[1,4,4,2]]

为什么会这样

标签: pythonpython-3.xlistmultidimensional-array

解决方案


提供的所有答案都适用于您的任务,但如果您想知道为什么您的原始代码不起作用,那是因为您声明列表的方式lst

lst=[[]]*(number_of_sublists+1)

通过这样做,您将在 的每个位置重复相同的列表lst,也就是说,您已经number_of_sublists+1引用了相同的列表。因此,当您修改其中之一时,您实际上是在同时修改所有内容。

您可以简单地将声明更改为此,这将解决您的问题:

lst = [[] for _ in range(number_of_sublists+1)]

推荐阅读