J'essaye d'écrire une fonction qui prend en compte une liste de flottants et détermine s'il y a ou non une séquence répétée de nombres dans cette liste. S'il y a une séquence répétée, alors il compte les nombres dans cette séquence.Python: Recherche de la longueur de la séquence répétée de nombres dans une chaîne de flottants
Ces exemples sont ce que je veux que ma fonction pour faire
Exemple 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
Exemple 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
Exemple 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
Exemple 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
Jusqu'à présent, ce que j'ai est:
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
Cela fonctionne pour tous les exemples dans le sens où match.group(1)
donne la séquence répétitive. Toutefois, pour une raison quelconque, len(match.group(1))
ne renvoie pas le nombre correct.
Comme pour l'exemple 1:
print match.group(1)
donne 1.0 8.0 4.0 2.0
Mais print len(match.group(1))
donne 15
il ne retourne pas aussi la valeur correcte pour l'exemple 4: print match.group(1)
donne 1.0 11.0 1.0 11.0 1.0 11.0 1.0 11.0
Et print len(match.group(1))
donne 35
Qu'est-ce que je fais mal?
MISE À JOUR:
Merci à l'une des réponses ci-dessous, je l'ai résolu le problème en utilisant print len(match.group(1))
len (match.group (1) .split())
Toutefois, pour une raison quelconque si 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)
donne 1.0 2.0 4.0 8.0 1.0 2.0 4.0 8.0
et non 1.0 2.0 4.0 8.0
1,0 8,0 4,0 2,0 1,0 8,0 4.0 2.0 n'est pas contenu dans votre chaîne de recherche, avez-vous mélangé les chiffres? – radicarl
@radicarl Excuses, oui j'ai copié le mauvais numéro. J'ai maintenant rectifié cette erreur dans la question. – Catherine