Список Python для цикла

Я новичок в Python и задал вопрос об обновлении списка, используя цикл for. Вот мой код:

urls = ['http://www.city-data.com/city/javascript:l("Abbott");' , 'http://www.city-data.com/city/javascript:l("Abernathy");' , 'http://www.city-data.com/city/Abilene-Texas.html' ,'http://www.city-data.com/city/javascript:l("Abram-Perezville");' , 'http://www.city-data.com/city/javascript:l("Ackerly");' , 'http://www.city-data.com/city/javascript:l("Adamsville");', 'http://www.city-data.com/city/Addison-Texas.html'] for url in urls: if "javascript" in url: print url url = url.replace('javascript:l("','').replace('");','-Texas.html') print url for url in urls: if "javascript" in url: url = url.replace('javascript:l("','').replace('");','-Texas.html') print "\n" print urls 

Я использовал первый цикл для проверки правильности синтаксиса, и он работал нормально. Но второй цикл – это код, который я хочу использовать, но он работает неправильно. Как я буду глобально обновлять список со вторым циклом цикла, чтобы я мог распечатать или сохранить обновленный список за пределами цикла for?

One Solution collect form web for “Список Python для цикла”

Вы можете обновлять элементы списка, используя свой индекс:

 for i, url in enumerate(urls): if "javascript" in url: urls[i] = url.replace('javascript:l("','').replace('");','-Texas.html') 

Другой альтернативой является использование списка:

 def my_replace(s): return s.replace('javascript:l("','').replace('");','-Texas.html') urls[:] = [my_replace(url) if "javascript" in url else url for url in urls] 

Здесь urls[:] означают замену всех элементов списка urls новым списком, созданным по усмотрению списка.

Причина, по которой ваш код не работал, заключается в том, что вы назначаете url переменной другому, и изменение одной из ссылок объекта на то, чтобы указывать на что-то другое, не влияет на другие ссылки. Таким образом, ваш код эквивалентен:

 >>> lis = ['aa', 'bb', 'cc'] >>> url = lis[0] #create new reference to 'aa' >>> url = lis[0].replace('a', 'd') #now assign url to a new string that was returned by `lis[0].replace` >>> url 'dd' >>> lis[0] 'aa' 

Также обратите внимание, что str.replace всегда возвращает новую копию строки, она никогда не изменяет исходную строку, потому что строки являются неизменяемыми в Python. В случае, если lis[0] был списком, и вы выполнили какую-либо операцию на нем с использованием .append , .extend т. .append , .extend это повлияло бы и на исходный список.

  • Сопоставление объектов Python с использованием строки
  • Преобразование строки в список. Python
  • Как определить, повторяется ли строка в Python?
  • Как распечатать переменную и строку в одной строке в Python?
  • Присоедините список строк в python и оберните каждую строку в кавычки
  • Pandas добавляет дополнительную строку в DataFrame при присвоении индекса
  • сортировка по регистро-регистровому регистру без уменьшения результата?
  • конвертировать список в строку с пробелами в python
  • Python - лучший язык программирования в мире.