我需要将一个列表拆分为一个列表列表[Python]
我有以下格式的项目列表:我需要将一个列表拆分为一个列表列表[Python],python,list,itertools,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实现这一
['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实现这一点,但我不知道它的语法
我感谢所有的帮助!谢谢
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
groupby
接受一个iterable和一个函数,并根据函数的返回值将项目分组返回。本例检查返回值是否为True
,然后显式输出列表列表(正如您在示例中所希望的那样)
编辑:这里有一个更可读的版本,由@JonClements在注释中建议(使用字符串转换到bool
而不是lambda
函数):
如果您不明确需要列表,也可以执行以下操作:
>>> for k, v in groupby(a, bool):
... if k:
... # do something with each group of values (v)
...
groupby
接受一个iterable和一个函数,并根据函数的返回值将项目分组返回。本例检查返回值是否为True
,然后显式输出列表列表(正如您在示例中所希望的那样)
编辑:这里有一个更可读的版本,由@JonClements在注释中建议(使用字符串转换到bool
而不是lambda
函数):
如果您不明确需要列表,也可以执行以下操作:
>>> for k, v in groupby(a, bool):
... if k:
... # do something with each group of values (v)
...
这是一个简单的单行程序。但是,它不使用itertools
list = ['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
formattedList = [x.split(" ") for x in " ".join(list).split(" ")]
这是一个简单的单行程序。但是,它不使用itertools
list = ['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
formattedList = [x.split(" ") for x in " ".join(list).split(" ")]
在for循环之后,需要最后一个
newList.append(tmp)
,才能添加最后一个子列表。我有基本相同的解决方案,有相同的bug。上一个数组是什么?它不会很糟糕,但是你可能需要处理循环之外的最后一个部分-它的末尾没有“
”,以强制添加到uber列表中。我添加了一种方法。在for循环之后,需要一个最终的newList.append(tmp)
,才能添加最后一个子列表。我有基本相同的解决方案,有相同的bug。上一个数组是什么?它不会很糟糕,但是你可能需要处理循环之外的最后一个部分-它的末尾没有“
”,以强制添加到uber列表中。我添加了一种方法。这是我的方法,但我会替换lambda v:v!=''代码>使用bool
他们对我喜爱的可读Python语言做了什么?或者,用一种他们能理解的方式说:[actions for actions in language.python.desecration()]
:-)[list(g)for k,g in groupby(a,bool),如果k]
在这里工作得很好,谢谢!这正是我所需要的。我学会了如何使用这个工具!希望这个问题能在谷歌上为其他人展示。+1是lambda使用的简单说明,尽管@JonClements方法同样有效。这是我的做法,但我会替换lambda v:v!=''代码>使用bool
他们对我喜爱的可读Python语言做了什么?或者,用一种他们能理解的方式说:[actions for actions in language.python.desecration()]
:-)[list(g)for k,g in groupby(a,bool),如果k]
在这里工作得很好,谢谢!这正是我所需要的。我学会了如何使用这个工具!希望这能在谷歌上为其他有此问题的人展示出来。+1是lambda使用的简单说明,尽管@JonClements方法同样有效
list = ['2', '', '9', '24', '1', '7', '12', '4', '', '18', '13', '34', '3', '10']
formattedList = [x.split(" ") for x in " ".join(list).split(" ")]