我有一个列表说 l = [1,5,8,-3,6,8,-3,2,-4,6,8]
。我试图将它分成正整数的子列表,即上面的列表会给我 [[1,5,8],[6,8],[2],[6,8]]
。我尝试了以下方法:
l = [1,5,8,-3,6,8,-3,2,-4,6,8]
index = 0
def sublist(somelist):
a = []
for i in somelist:
if i > 0:
a.append(i)
else:
global index
index += somelist.index(i)
break
return a
print sublist(l)
有了这个,我可以获得第一个子列表 ([1,5,8]
) 和第一个负整数在 3
处的索引号。现在,如果我再次运行我的函数并将它传递给 l[index+1:]
,我将无法获取下一个子列表并假设 index
将更新为显示 6
。但是我不能,我这辈子都不知道如何在循环中运行该函数或使用什么条件才能继续运行我的函数并给它 l[index+1:]
其中 index
是更新的、最近遇到的负整数的位置。任何帮助将不胜感激
最佳答案
您需要在此处跟踪两级列表 - 包含子列表的大列表和子列表本身。启动一个大列表,启动一个子列表,并在 i
为非负数(顺便说一下,包括正数和 0)时继续追加到当前子列表。当i
为负数时,将当前子列表附加到大列表并开始一个新的子列表。另请注意,您应该处理第一个元素为负数或最后一个元素不为负数的情况。
l = [1,5,8,-3,6,8,-3,2,-4,6,8]
def sublist(somelist):
result = []
a = []
for i in somelist:
if i > 0:
a.append(i)
else:
if a: # make sure a has something in it
result.append(a)
a = []
if a: # if a is still accumulating elements
result.append(a)
return result
结果:
>>> sublist(l)
[[1, 5, 8], [6, 8], [2], [6, 8]]
关于 python : Split list based on negative integers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41864348/