2010-01-25 5 views
8

J'ai une liste de sites Web dans une chaîne et je faisais une boucle pour ajouter "http" au début si le premier index ne l'est pas " h "mais quand je le retourne, la liste n'a pas changé.Ajout d'une chaîne devant une chaîne pour chaque article dans une liste en python

n est ma liste de sites h est « http »

for p in n: 
    if p[0]!="h": 
     p= h+ p 
    else: 
     continue 
return n 

quand je retourne la liste, il retourne ma liste originale et sans appending du « http ». Quelqu'un peut-il m'aider?

+0

pourrait envisager de vérifier passé le premier caractère si votre liste comporte des sites Web qui commencent par « h », mais ne sont pas « http » – hexparrot

Répondre

14

Cela pourrait aussi être fait en utilisant la liste de compréhension:

n = [i if i.startswith('h') else 'http' + i for i in n] 
4

Vous devez réaffecter l'élément de liste - les chaînes sont immuables, donc += crée une nouvelle chaîne, ne mute pas l'ancienne. I.e. .:

for i, p in enumerate(n): 
    if not p.startswith('h'): 
    n[i] = 'http' + p 
0
n = [{True: '', False: 'http'}[p.startswith('h')] + p for p in n] 

Ne pas vraiment faire. Bien qu'il fonctionne.

+1

Alors, pourquoi proposez-vous ce? – Escualo

+2

Probablement parce que c'est une façon amusante et amusante de le faire. –

+0

Juste pour info: Python a maintenant des expressions if-else, donc les dict/sequence/et-ou hacks pour les simuler ne sont plus nécessaires. Voir la réponse de Max S. pour une version dé-hackifiée de la vôtre. –

0
>>> n=["abcd","http","xyz"] 

>>> n=[x[:1]=='h' and x or 'http'+x for x in n] 

>>> n 
['httpabcd', 'http', 'httpxyz'] 
+0

Échec pour une chaîne vide. Mais j'espère qu'il n'y en aura pas trop. –

+0

avez-vous essayé? :-) '[: 1]' est utilisé à la place de '[0]' pour ce cas. – YOU

+0

Non, je pensais avoir vu un problème avec la logique, mais je me suis trompé dans ce cas particulier. Si la condition avait été 'x [: 1]! = 'H', alors cela aurait échoué. –

Questions connexes