我有四个或五个都具有序列的字符串,我想将它们分组在一个列表中。
例如:
cake/1/
cake/2/
big/1/
nice/1/
cake/3/
我需要清单中的蛋糕,清单中的大蛋糕和清单中的好蛋糕
这就是我尝试过的。
res = [list(i) for j, i in groupby(y, lambda a: a.split('/')[0])]
这行不通,我考虑过使用正则表达式,但是我不确定是否可以继续前进。
这是预期的输出
[['cake/1/', 'cake/2/', 'cake/3/'], ['big/1/'], ['nice/1/']]
答案 0 :(得分:1)
您几乎是正确的:
groupby
每次更改键时都在更改组:
1112111
将被分组为:111 - 2 - 111
因此,如果您想保证所有您的组将合并在一起,则应首先对字符串列表进行排序,以使所有相同的第一个单词字符串都在附近并且不会被拆分通过另一个首字母字符串:
y = [
'cake/1/',
'cake/2/',
'big/1/',
'nice/1/',
'cake/3/'
]
res = [list(i) for j, i in groupby(sorted(y), lambda a: a.split('/')[0])]
^
|
HERE --------------------------------+
[['big/1/'], ['cake/1/', 'cake/2/', 'cake/3/'], ['nice/1/']]