mua*_*mar 2 python string list
我有一个字符串列表如下:
a = ['aaa-t1', 'aaa-t2', 'aab-t1', 'aab-t2', 'aab-t3', 'abc-t2']
Run Code Online (Sandbox Code Playgroud)
我想通过相似性来聚类这些字符串.您可能会注意到,a[0]并a[1]共享相同的根:aaa.我想生成一个新的列表列表,如下所示:
b = [['aaa-t1', 'aaa-t2'], ['aab-t1', 'aab-t2', 'aab-t3'], ['abc-t2']]
Run Code Online (Sandbox Code Playgroud)
怎么办呢?到目前为止,我没有成功,我没有任何体面的代码可以显示.我正在尝试比较字符串,fuzzywuzzy但这样做需要创建可能的字符串组合,并且与列表的长度严重缩放.
您可以使用groupby按键生成的键对字符串进行分组str.split:
>>> from itertools import groupby
>>> a = ['aaa-t1', 'aaa-t2', 'aab-t1', 'aab-t2', 'aab-t3', 'abc-t2']
>>> [list(g) for k, g in groupby(sorted(a), lambda x: x.split('-', 1)[0])]
[['aaa-t1', 'aaa-t2'], ['aab-t1', 'aab-t2', 'aab-t3'], ['abc-t2']]
Run Code Online (Sandbox Code Playgroud)
groupby返回一个可迭代的元组(key, group),其中key是用于分组的键,并且group可以迭代组中的项.给出的第一个参数groupby是可生成组的迭代,可选的第二个参数是一个被调用以生成密钥的关键函数.由于groupby只有组,因此a需要首先对连续元素进行排序.