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