我正在尝试编写一个函数,该函数接收浮点数列表并确定该列表中是否存在重复的数字序列。如果有重复序列,则计算该序列中的数字。
这些例子是我希望我的功能
示例1:
function = '1.0 8.0 4.0 2.0 1.0 8.0 4.0 2.0 1.0 8.0 4.0 2.0 1.0 8.0'
result = find_repeating_sequence(function)
# repeating sequence = 1.0, 8.0, 4.0, 2.0
# so result should equal 4 in this case
示例2:
function = '1.0 8.0 4.0 1.0 2.0 1.0 8.0 4.0 1.0 2.0 1.0 8.0'
result = find_repeating_sequence(function)
# repeating sequence = 1.0, 8.0, 4.0, 1.0, 2.0
# so result should equal 5 in this case
示例3:
function = '1.0 8.0 4.0 2.0 1.0 7.0 6.0 3.0 2.0 5.0 9.0'
result = find_repeating_sequence(function)
# repeating sequence doesn't exist
# so result should equal None in this case
示例4:
function = '1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0'
result = find_repeating_sequence(function)
# repeating sequence = 1.0, 11.0
# so result should equal 2 in this case
到目前为止,我得到的是:
def find_repeating_sequence(function):
regex = re.compile(r'(.+ .+)( \1)+')
match = regex.search(function)
result = match
if result == None:
print "There was no repeating sequence found!"
else:
print "Repeating sequence found!"
print match.group(1)
result = match.group(1)
return result
这适用于match.group(1)
给出重复序列的意义上的所有示例。但由于某种原因,len(match.group(1))
未返回正确的数字。
与示例1类似:
print match.group(1)
提供1.0 8.0 4.0 2.0
但print len(match.group(1))
给出了15
它也没有返回示例4的正确值:
print match.group(1)
提供1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0
而print len(match.group(1))
给出了35
我做错了什么?
更新
感谢下面的一个答案,我使用len(match.group(1).split())解决了print len(match.group(1))
问题
但出于某种原因,如果
function = 1.0 2.0 4.0 8.0 1.0 2.0 4.0 8.0 1.0 2.0 4.0 8.0 1.0 2.0 4.0 8.0
print match.group(1)
提供了1.0 2.0 4.0 8.0 1.0 2.0 4.0 8.0
而不是1.0 2.0 4.0 8.0
答案 0 :(得分:1)
match.group()返回一个字符串,在这种情况下,len()返回字符串中的字符数。
你可以按空格分割你的字符串,然后计算元素的数量
回答更新:
你的表达是贪婪的,它试图找到最长的匹配。试试(.+? .+?)( \1)+?
。限定符后面的问号使正则表达式变得懒惰: