2013-04-29 2 views
-3

mon code est:Modifier la liste en Python

>>> lis=['ALRAGUL','AKAL','to7a'] 
>>> for i in lis: 
    if i.startswith('AL'): 
    j=lis[lis.index(i)+1] 
    L=list(itertools.repeat(j, 2)) 
    lis[lis.index(i)+1]=L 
    lis[lis.index(i)+1]=i[2: ] 
    lis[lis.index(i)]='AL' 
>>> print lis 
['AL', 'RAGUL', 'to7a'] 

Mais je veux que le résultat de devenir:

['AL', 'RAGUL','AKAL' 'to7a'] 

et je le veux sens d'une certaine manière générale que le code fonctionne avec tout ce que les mots sont et Par exemple, je veux diviser ('AL') dans toutes les conditions thx beaucoup :)

+0

Quelle est la logique derrière ce code? Que fait-il même? – Blender

+0

Pour clarifier, il devrait seulement se diviser si 'AL' est au début d'une chaîne? Parce que 'AKAL' n'est pas divisé dans votre exemple. – thegrinner

+0

@ thegrinner oui je le voulais seulement au début ..hx, c'est exactement ce que je voulais – user1996764

Répondre

2

Quelque chose comme ça?

def separate(lst, chunk): 
    for n in lst: 
     if n.startswith(chunk): 
      for x in n.partition(chunk)[1:]: 
       yield x 
     else: 
      yield n 

Et la sortie:

In [104]: list(separate(['ALRAGUL','AKAL','to7a'], 'AL')) 
Out[104]: ['AL', 'RAGUL', 'AKAL', 'to7a'] 
+0

@ Blender Thx beaucoup ..peut aussi fonctionner :) – user1996764

2

Cela devrait le faire:

>>> lis = ['ALRAGUL', 'AKAL', 'to7a'] 
>>> for i, s in list(enumerate(lis)): 
... if s.startswith('AL'): 
...  lis[i:i+1] = ['AL', s[2:]] 
... 
>>> lis 
['AL', 'RAGUL', 'AKAL', 'to7a'] 
>>> 
+0

Thx beaucoup .. ça marche .. J'apprécie vraiment :) – user1996764

+0

et si je veux ajouter une autre condition, quelque chose comme ça: >>> lis = ['ALRAGUL', 'AKALH', 'to7a'] >>> pour moi, s dans la liste (énumérer (LIS)): \t si s.startswith (al '): \t \t ran [i: i + 1] = [Al', s [2:]] \t si s. endswith ('H'): \t \t lis [i: i + 1] = [s [: - 1], 'H'] \t \t >>> lis [ 'AL', 'AKAL', 'H', 'AKALH', 'to7a'] Mais je veux que le résultat soit: [ 'AL', 'RAGUL', » AKAL ',' H ',' to7a '] des idées? Thx :) – user1996764

1

Une autre option:

from itertools import chain 
import re 

print filter(None, chain.from_iterable(re.split('^(AL)', el) for el in lis)) 

Ou:

filter(None, chain.from_iterable(map(re.compile ('^(AL)').split, lis))) 
+0

..yes fonctionne aussi Merci pour votre aide :) – user1996764