我需要将一个列表拆分为一个列表列表[Python]

2024-04-30 05:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下格式的项目列表:

['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']

我需要把它变成一个由空项分隔的列表:

[['2'], ['9', '24', '1', '7', '12', '4'], ['18', '13', '34', '3', '10']]

我只是不知道该怎么办。我试过做一个嵌套循环,但没有按计划工作。你知道吗

我发现有一种方法可以用itertools.groupby组但我搞不懂它的语法。你知道吗

我感谢所有的帮助!谢谢!你知道吗


Tags: 项目方法列表格式语法嵌套循环itertoolsgroupby
3条回答
myList = ['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
newList = []
tmp = []
for item in myList:
    if item:
        tmp.append(item)
    else:
        newList.append(tmp)
        tmp = []
newList.append(tmp)          # may need to wrap this in an
                             #   "if tmp != []" thingy

这是一个简单的一行。但是它不使用itertools。你知道吗

   list = ['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
   formattedList = [x.split(" ") for x in " ".join(list).split("  ")]
>>> from itertools import groupby
>>> a = ['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
>>> [list(items) for status, items in groupby(a, lambda v: v != '') if status]
[['2'], ['9', '24', '1', '7', '12', '4'], ['18', '13', '34', '3', '10']]

groupby接受一个iterable和一个函数,并根据函数的返回值返回分组到集合中的项。本例检查返回值是否为True,然后显式输出列表列表(正如您在示例中所希望的那样)。你知道吗

Edit:下面是一个可读性稍高的版本,由@JonClements在注释中建议(使用字符串强制转换到bool而不是lambda函数):

[list(g) for k, g in groupby(a, bool) if k]

如果不需要明确的列表,还可以执行以下操作:

>>> for k, v in groupby(a, bool):
...     if k:
...         # do something with each group of values (v)
...

相关问题 更多 >