我有这种格式的项目列表:
['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来完成它,但我无法弄清楚它的语法。
我感谢所有帮助!谢谢!
答案 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)