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

时间:2014-06-10 02:34:24

标签: python list itertools

我有这种格式的项目列表:

['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来完成它,但我无法弄清楚它的语法。

我感谢所有帮助!谢谢!

4 个答案:

答案 0 :(得分:7)

>>> 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,然后显式输出列表列表(就像您在示例中所需的那样)。

编辑:这是一个稍微易读的版本,由@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)
...

答案 1 :(得分: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

答案 2 :(得分:1)

这是一个简单的一个班轮。但它不使用itertools。

   list = ['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
   formattedList = [x.split(" ") for x in " ".join(list).split("  ")]

答案 3 :(得分:0)

a=['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
temp=[]
b=[]
for i in a:
   if i =='':
      b.append(temp)
      temp=[]
   else:

      temp.append(i)
b.append(temp)