2010-01-25 10 views
8

Tengo una lista de sitios web en una cadena y estaba haciendo un ciclo for para agregar "http" en la parte delantera si el primer índice no es " h "pero cuando lo devuelvo, la lista no cambia.Agregar una cadena delante de una cadena para cada elemento en una lista en python

n es mi lista de sitios web h es "http"

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

cuando vuelva la lista, devuelve mi lista original y sin Anexión del "http". ¿Puede alguien ayudarme?

+0

pudiera considerar revisar más allá del primer personaje si su lista de sitios web tiene que comienzan con 'h', pero no son 'http' – hexparrot

Respuesta

14

Esto también se podría hacer usando listas por comprensión:

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

Debe reasignar el elemento de la lista: las cadenas son inmutables, por lo que += está creando una nueva cadena, sin mutar la anterior. Es decir .:

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] 

realmente no hacer esto. Aunque funciona.

+1

Entonces, ¿por qué sugieres que? – Escualo

+2

Probablemente porque es una forma divertida de hacerlo. –

+0

Just FYI: Python tiene ahora expresiones if-else, por lo que el dict/sequence/y-o hacks para simularlas ya no son necesarias. Vea la respuesta de Max S. para una versión desarticulada suya. –

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

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

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

Fallará una cadena vacía. Pero con suerte no habrá muchos de esos. –

+0

has probado? :-) '[: 1]' se usa en lugar de '[0]' para ese caso. – YOU

+0

No, pensé que vi un problema con la lógica, pero me equivoqué en este caso particular. Si la condición hubiera sido 'x [: 1]! = 'H'', habría fallado. –

Cuestiones relacionadas