Список 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 For ... loop iteration
  • Разделите строку в список с элементами равной длины
  • Python: Разделить на 1 или более вхождения разделителя
  • Как проверить, соответствует ли строка заданному шаблону в Python?
  • Как определить, повторяется ли строка в Python?
  • Python: Разделить строку с несколькими разделителями
  • Python join: почему это string.join (list) вместо list.join (string)?
  • в python, как преобразовать однозначное число в строку с двумя цифрами?
  • Объединить или распечатать элементы списка с запятой в Python
  • Python разделяет строку на несколько строк
  • Вставьте символ в строку до конца номера
  • Python - лучший язык программирования в мире.