使用数字后缀python对重复的字符串进行分组

时间:2017-07-04 11:42:20

标签: python group-by duplicates

我在mylist中有一个字符串列表

我想要归还2组(动物,动物1,动物04,动物3)和(鸟,鸟1,鸟2) 基本上这些是带有后缀的重复项 我有一种感觉itertool.groupby将是一个优雅的解决方案,但无法达到它。

我试过了

docker run YOUR_IMAGE MY_URL

结果:

def f(a,b):
    if b.startswith(a):
        return True
    return False

mylist = 'animal animal1 animal04 animal3 bird bird1 bird2 fish insect'.split()
combos = itertools.combinations(sorted(mylist), 2)

for k,v in itertools.groupby(combos,lambda (x,y):f(x,y)):
    print list(v)

第一行和第三行看起来接近我的答案,但我似乎无法避免另外两行额外的行

提前感谢您的帮助或指导。谢谢

1 个答案:

答案 0 :(得分:1)

不确定itertools.groupby是否是正确使用的工具...但是这里有一个使用正则表达式的解决方案,使用re.findall

import re

string = 'animal animal1 animal04 animal3 bird bird1 bird2 fish insect'
mylist = string.split()

items = {}
for i in sorted(mylist):
    matches = re.findall('%s[\d]+' %i, string, re.M)
    if matches:
        items[i] = [i] + matches 

    elif i.isalpha():
        items[i] = [i] # non-alphabetical entries get their own entry

for k in items:
    print(items[k])

打印出来:

['bird', 'bird1', 'bird2']
['insect']
['animal', 'animal1', 'animal04', 'animal3']
['fish']

该模式将查找具有数字后缀的当前单词的所有版本,并仅返回这些匹配项。