0
votes

Comptage du nombre de sous-chaînes

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)


0 commentaires

3 Réponses :


1
votes

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)


0 commentaires

2
votes

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)


0 commentaires

1
votes

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


0 commentaires