如何将列表拆分为较小的列表?

Posted

技术标签:

【中文标题】如何将列表拆分为较小的列表?【英文标题】:How can I split a list into smaller lists? 【发布时间】:2012-11-04 20:30:28 【问题描述】:

我有一个清单:

lists = (['1','2','3','S','3','4','S','4','6','7'])

我想在每次出现“S”时将列表拆分为更小的列表,并将“S”消除为:

([['1','2','3'],['3','4],['4','6','7']])

我的代码:

def x (lists):
    empty = ''
    list = []

    for x in lists:
        if x == empty:
            list[-1:].append(x)
        else:
            list.append([x])

    return (list)

我尝试过这样的事情,但我对 python 很陌生,而且我一无所获。没什么特别的,我将如何解决我的问题?

【问题讨论】:

【参考方案1】:

试试itertools.groupby():

>>> from itertools import groupby
>>> lists = ['1','2','3','S','3','4','S','4','6','7']
>>> [list(g[1]) for g in groupby(lists, lambda i:i!='S') if g[0]]
[['1', '2', '3'], ['3', '4'], ['4', '6', '7']]

【讨论】:

您好,感谢您的帮助!但是,此答案有效,无论如何,我有什么可以解决的吗?我不认为我离得那么远,我宁愿坚持我现在所了解的,因为我还很新! groupby() 是这里的关键点。您可能需要阅读 python 文档。 @user1828072 '修复你已有的东西'的问题是你的方法是. . .好吧,不是特别像pythonic。这并不是说(最终结果)您的方法不正确,只是不太可取,而且可能效率较低。【参考方案2】:

也许像map(list,''.join(lists).split('S'))

或者,[list(s) for s in ''.join(lists).split('S'))

【讨论】:

【参考方案3】:

嗯,可能很有趣,但这应该可行:

[s.split('#') for s in '#'.join(lists).split('#S#')]

如果lists 中不太可能出现任何字符,则可以使用任何字符代替'#'

【讨论】:

以上是关于如何将列表拆分为较小的列表?的主要内容,如果未能解决你的问题,请参考以下文章

尝试将列表拆分为较小的列表时出错

将列表拆分为较小的列表(分成两半)

python – 将列表拆分为较小的列表

如何将大数组拆分为较小的数组?

如何将 mysqldump 的输出拆分为较小的文件?

将更改列表压缩为较小的列表