python : Split list based on negative integers

标签 python

我有一个列表说 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/

相关文章:

python urllib.parse 不保留路径部分

Python 词袋聚类

python : hex to date time

python - Pandas 按时间戳和 id 分组并计数

python - 如何仅绘制seaborn 热图的下三角?

python - SSL错误-Python3

python - 如何从 Ordered Dictionary 中获取所有键?

python - 估计回归中的后验预测

python - 类型错误 : 'utf8' is an invalid keyword argument for Compat32 smtplib email error message

python - 删除元素,然后迭代并组合列表中的元素python