Supposons que j'ai une chaîne aaa et que je veux le nombre de toutes les sous-chaînes de ce aaa .
Je le fais avec le code suivant:
Si j'utilise le code suivant:
{'a': 3, 'aa': 2, 'aaa': 1}
J'obtiens le résultat:
{'a': 6, 'aa': 2, 'aaa': 1}
Mais selon mes besoins, je veux que le nombre de aa soit de deux, car dans une chance, je peux choisir le aa à partir de deux positions, c'est-à-dire aa de s [0: 2] et autre de s[2:4 .
Si je modifie mon code comme ci-dessous, j'obtiens le résultat souhaité pour aa mais le décompte de a est incorrect maintenant.
s="aaa"
res = [s[i: j] for i in range(len(s))for j in range(i + 1, len(s) + 1)]
d={}
for i in res:
if i not in d.keys():
d[i]=0
for j in range(len(s)+1):
d[i]+=s[:j].count(i)
print(d)
J'obtiens la sortie suivante qui est faux:
{'a': 3, 'aa': 1, 'aaa': 1}
Quelqu'un peut-il m'aider à obtenir le résultat souhaité?
Résultat souhaité:
s="aaa"
res = [s[i: j] for i in range(len(s))for j in range(i + 1, len(s) + 1)]
d={}
for i in res:
if i not in d.keys():
d[i]=s.count(i)
print(d)
3 Réponses :
Vous pouvez essayer ceci via re .
['a', 'a', 'a'] ['aa', 'aa'] ['aaa']
Output:
x="aaa"
import re
keys=["a", "aa", "aaa"]
for key in keys:
print re.findall(r"(?=({}))".format(key), x)
Je pense que c'est ce que vous voulez:
s = "aaa"
res = [s[i: j] for i in range(len(s))for j in range(i + 1, len(s) + 1)]
d = {}
for i in res:
if i not in d.keys():
d[i] = 1
else:
d[i] += 1
print(d)
Inspiration toutes les sous-chaînes
solution
{'a': 3, 'aa': 2, 'aaa': 1}
sortie
test_str = "aaa"
ssc = {}
for ss in [test_str[i: j] for i in range(len(test_str)) for j in range(i + 1, len(test_str) + 1)]:
ssc[ss] = 1 if ss not in ssc.keys() else ssc[ss] + 1
ssc