我是Python(3.6)的新手,并且正在努力理解itertools groupby . 我有以下包含整数的列表:
list1 = [1, 2, 0, 2, 3, 0, 4, 5, 0]
但是列表也可能更长,并且在每对数字之后不必出现'0' . 它也可以是3,4或更多的数字 . 我的目标是将此列表拆分为子列表,其中“0”用作分隔符,并且不会出现在任何这些子列表中 .
list2 = [[1, 2], [2, 3], [4, 5]]
这里已经解决了类似的问题:Python spliting a list based on a delimiter word答案2似乎对我有很大帮助,但不幸的是它只给了我一个TypeError .
import itertools as it
list1 = [1, 2, 0, 2, 3, 0, 4, 5, 0]
list2 = [list(group) for key, group in it.groupby(list1, lambda x: x == 0) if not key]
print(list2)
文件“H:/Python/work/ps0001/example.py”,第13行,在list2 = [list(group)for key,group in it.groupby(list,lambda x:x =='0')if不是键] TypeError:'list'对象不可调用
我很感激任何帮助,并很高兴终于了解groupby .
6 回答
您正在检查"0"(str),但您的列表中只有0(int) . 此外,您使用
list
作为第一个列表的变量名称,这是Python中的关键字 .这应该给你:
您可以使用正则表达式:
或单线解决方案:
在您的代码中,您需要将
lambda x: x == '0'
更改为lambda x: x == 0
,因为您使用的是int
列表,而不是str
列表 .由于其他人已经展示了如何使用
itertools.groupby
改进您的解决方案,您也可以在没有库的情况下执行此任务:您可以在Loop中执行此操作,如下面注释的Snippet所示:
有效:
使用zip返回列表元组并稍后将它们转换为列表
尝试使用
join
然后拆分0
在我的控制台上运行: