我在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)
第一行和第三行看起来接近我的答案,但我似乎无法避免另外两行额外的行
提前感谢您的帮助或指导。谢谢
答案 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']
该模式将查找具有数字后缀的当前单词的所有版本,并仅返回这些匹配项。