2010-01-25 13 views
8

Ho una lista di siti Web in una stringa e stavo facendo un ciclo for per aggiungere "http" nella parte anteriore se il primo indice non è " h "ma quando lo restituisco, l'elenco non è cambiato.Aggiunta di una stringa davanti a una stringa per ogni elemento in un elenco in python

n è la mia lista di siti web h è "http"

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

Quando ritorno alla lista, restituisce la mia lista originale e senza apposizione del "http". Qualcuno può aiutarmi?

+0

potrebbero considerare la verifica dopo il primo carattere se la vostra lista ha siti web che iniziano con 'h', ma non sono 'http' – hexparrot

risposta

14

Questo potrebbe anche essere fatto utilizzando la lista di comprensione:

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

È necessario riassegnare l'elemento dell'elenco: le stringhe sono immutabili, pertanto += sta creando una nuova stringa, non mutando quella precedente. Cioè .:

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] 

non si ha realmente farlo. Anche se è funziona.

+1

Allora perché mi suggerite esso? – Escualo

+2

Probabilmente perché è un modo divertente di farlo. –

+0

Solo per FYI: Python ha ora le espressioni if-else, quindi i dit/sequenza/e-o gli hack per simularli non sono più necessari. Vedi la risposta di Max S. per una versione de-hackified del tuo. –

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

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

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

Fallirà per una stringa vuota. Ma spero che non ce ne siano troppi. –

+0

hai provato? :-) '[: 1]' è usato al posto di '[0]' per quel caso. – YOU

+0

No, pensavo di aver visto un problema con la logica, ma mi ero sbagliato in questo caso particolare. Se la condizione fosse stata 'x [: 1]! = 'H'' allora sarebbe fallita. –

Problemi correlati