【发布时间】:2015-01-27 06:38:36
【问题描述】:
我有以下列表:someList = ['blablahihix', 'somethinghihi'],我想返回一个列表,其中包含列表的两个元素之间的重复模式(在本例中为“hihi”)。
这就是我正在做的事情:
p, r = re.compile(r'(.+?)\1+'), []
for i in strList:
r.extend(p.findall(i) or [i])
当我print r 时,它给了我['bla', 'hi', 'hi']。我想要的只是['hihi']。我不希望返回“blabla”,因为列表的第二个元素中没有“blabla”。
我错过了什么?
【问题讨论】:
-
你的 somdict 字典还是列表?
-
你为什么不期望
hi,或hih,或ihi,或h,或i是重复模式?在任意两个中等长度的字符串之间,存在可能的共享模式爆炸。您可能需要考虑是否可以替代您所问的问题。也许您真正想要的是两者中出现的最大子字符串。 -
对不起,我的意思是列表而不是字典。
-
我想要的是
someList进行迭代,以便返回“hihi”(这是两个元素之间的重复模式) -
如果“重复”是指“存在于两个字符串中”,那么
hihi不是唯一的“重复模式”。hihi的任何子字符串(例如ihi)也会重复。如果是这样的话,那么我猜你真正想要的是一组最大的重复模式。但这仍然可能不是您所期望的。例如,如果你的两个字符串是“axbhihicd”和“efhihixg”,那么“hihi”是最大重复模式,“x”也是。