python - 如何根据 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]]
为什么会这样
解决方案
提供的所有答案都适用于您的任务,但如果您想知道为什么您的原始代码不起作用,那是因为您声明列表的方式lst
。
lst=[[]]*(number_of_sublists+1)
通过这样做,您将在 的每个位置重复相同的列表lst
,也就是说,您已经number_of_sublists+1
引用了相同的列表。因此,当您修改其中之一时,您实际上是在同时修改所有内容。
您可以简单地将声明更改为此,这将解决您的问题:
lst = [[] for _ in range(number_of_sublists+1)]
推荐阅读
- angular - ng-multiselect-dropdown 如何以编程方式取消选择
- flutter - 如何测试在 Flutter 中返回 Future 的异步方法的执行时间
- c++ - 在 VS 调试器中使用 char/CString 显示希伯来语字符时出现问题
- asp.net - 在 ASP.NET 页面上使用 System.Security.Claims.ClaimsPrincipal
- android - Flutter tflite MoveNet 模型 java.lang.RuntimeException: doInBackground()
- laravel - 在 docker (Laravel Sail) 上安装 Wkhtmltopdf 时出错
- sql - 如何按一列分组并总结此分组列的结果
- regex - Dialogflow ES Regex 替代负前瞻
- javascript - javascript中嵌套异步调用的单元测试
- regex - 使用 sed 仅替换字符的单个实例