Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要将一个列表拆分为一个列表列表[Python]_Python_List_Itertools - Fatal编程技术网

我需要将一个列表拆分为一个列表列表[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("  ")]