2010-01-25 1 views
8

У меня есть список сайтов в строке, и я делал цикл for, чтобы добавить «http» спереди, если первый индекс не является " h ", но когда я верну его, список не изменился.Добавление строки перед строкой для каждого элемента в списке в python

п мой список сайтов ч является «HTTP»

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

, когда я вернуть список, он возвращает свой первоначальный список и не добавляющим из «HTTP». Может кто-нибудь мне помочь?

+0

может рассмотреть возможность проверить мимо первого символа, если ваш список имеет веб-сайты, которые начинаются с «ч», но не «HTTP» – hexparrot

ответ

14

Это также может быть сделано с помощью списка понимание:

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

Вам необходимо переназначить элемент списка - строки неизменяемы, поэтому += создает новую строку, не изменяя старый. Т.е .:

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] 

ли на самом деле не делать этого. Хотя это делает работа.

+1

Тогда почему вы предлагаете это? – Escualo

+2

Наверное, потому что это забавно взломанный способ сделать это. –

+0

Just FYI: Python теперь имеет выражения if-else, поэтому dict/sequence/and-or hacks имитировать их больше не нужны. См. Ответ Макса С. для вашей де-взломанной версии. –

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

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

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

Ошибка для пустой строки. Но, надеюсь, их не будет слишком много. –

+0

Вы пробовали? :-) '[: 1]' используется вместо '[0]' для этого случая. – YOU

+0

Нет, я думал, что вижу проблему с логикой, но я ошибся в этом конкретном случае. Если условие было «x [: 1]! = 'H'', то оно потерпело бы неудачу. –

Смежные вопросы