Bonjour,

Je dispose de 2 Listes, Lf et Li, composées chacune de groupes de 4 lettres (plusieurs milliers) en plusieurs "exemplaires" parfois dans chacune.
Ex:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
>>> Lf=['ACBD', 'AABB', 'ABBB','ACBD','ACBD','ABBB']
>>> Li=['ACBD', 'AAAB', 'AABB','ACBD','ACBD','AABB']
Je voudrais fondre ces deux listes en une liste de tuples (triés) en éliminant les doublons et en gardant le nombre total d'exemplaires de chaque :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Lt=[('AAAB',1),('AABB',3),('ABBB',2),('ACBD',6)]
J'ai trouvé :
- comment éliminer les doublons
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 >>> Lt= list(set(Lf))
Lt.sort()
,
- je saurais compter le nombre d'occurences de chaque groupe dans chaque fichier...

Mais je ne sais pas comment combiner les deux, alors j'ai créé une fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
def tri_et_compte(Lf, nb):
    no,L=0,[]
    for i in xrange(nb):
        x1,x2,x3=Lf[i-1],Lf[i],Lf[i+1]
        if x2 == x3:
            no+=1
        else:
            if x2 == x1:
                no+=1
                L.append((x2,no))
                no=0
            else :
                L.append((x2,1))
                no=0
    nl=len(L)
    return L,nl 
 
Lf=['ACBD', 'AABB', 'ABBB','ACBD','ACBD','ABBB']
Li=['ACBD', 'AAAB', 'AABB','ACBD','ACBD','AABB']
Lf+=Li
Lf.sort()
nbl=len(Lf)  
Lf.append('>>>>')
L=[]
L,nl=tri_et_compte(Lf,nbl)
print L
Mais je trouve ça lourd, emprunté et "naïf"... Alors je me dis qu'il y a certainement plus sioux et plus rapide...

Donc, vos suggestions sont les bienvenues...

Merci d'avance