如何更改
等列表 [30,20,0,48,20,10,20,0,30]
为:
[[30,20],[48,20,10,20],[30]]
每次在列表中有0
时将其除以?我尝试了很多方法,但它们都占用太多线条才有意义(10行)。我已经看了很多关于堆栈溢出的列表拆分问题,我找不到任何有用的东西。
编辑:
我在问是否有任何方法可以做list.split(0)或类似的事情,但似乎答案是没有办法做到这一点。我想知道我是否可以在一行中完成它,或者我是否可以使用通用模块。我已经尝试过多行,它已经工作了,但我认为这很不方便。
编辑2:
我试过的代码是:
list = [30,20,0,48,20,10,20,0,30] #1, 1 list
newlist = [] #2, 2 lists
addinglist = [] #3, 3 lists
for x in list: #4
if x == 0: #5
newlist.append(addinglist) #6
addinglist = [] #7
else: #8
addinglist.append(x) #9
newlist.append(addinglist) #10
list = newlist #11 lines, 3 lists.
print(addinglist)
代码需要11行和3个列表(一个被修改,另外两个没用)。
答案 0 :(得分:0)
这有效:
x=[10,20,30,0,4,5,6,0,1,1,1,1,1,1,0,1]
output=[]
temp=[]
for i in x:
if i==0:
output.append(temp)
temp=[]
else:
temp.append(i)
output.append(temp)
输出的位置是:
[[10, 20, 30], [4, 5, 6], [1, 1, 1, 1, 1, 1], [1]]
代码很短,但我确信有更简洁的解决方案。
答案 1 :(得分:0)
正如TigerhawkT3所说:
启动结果列表,启动运行列表,附加到 只要条件成立,运行列表,并追加 当前列表并且每次开始一个新列表并非如此 共同的任务。请证明你自己尝试过一些东西 第一
事实上,这是一项非常简单的任务,可以在4个可重新排列的Python代码行中完成:
final=[]
for elem in [0]+x:
if elem == 0: final.append([])
else: final[-1].append(elem)
x
是您的清单。
这个答案的目的不是告诉你如何去做。但是要告诉你,你可以发布任何相关的代码(并且不一定有效),这个答案会更容易接受。
总结:
答案 2 :(得分:0)
我想知道是否可以一行完成,或者有什么办法 可以使用通用模块。
是的,两者都可以。您正在尝试对数据进行分组,因此groupby
中的itertools
是您的朋友:
from itertools import groupby
data = [30, 20, 0, 48, 20, 10, 20, 0, 30]
result = [list(group) for non_zero, group in groupby(data, lambda n: n != 0) if non_zero]
print(result)
输出
> python3 test.py
[[30, 20], [48, 20, 10, 20], [30]]
>
我们正在使用键函数根据数据是否为零来捆绑数据。 group
变量包含捆绑包; non_zero
变量(又名key
)是一个布尔值,指示是否是我们想要的捆绑包。