Замена списка Python - PullRequest
       4

Замена списка Python

0 голосов
/ 23 июня 2011

Как заменить каждый элемент в списке элементом в той же позиции из другого списка?Я думал, что-то вроде этого может работать:

list1 = ['a', 'b', 'c', 'd']
list2 = ['a_replaced', 'b_replaced', 'c_replaced']
text = open(textfile, 'r')
 n = 0
for line in  text:
    line = line[0:len(line)-1]
    line.replace(col[n], outcol[n])
    print line
    n + 1 

Но это не работает.Что я делаю не так?

Ответы [ 4 ]

3 голосов
/ 23 июня 2011

5 вещей:

  • Вы ссылаетесь на col и outcol, которые, как я полагаю, на самом деле list1 и list2.
  • list1 и list2разных размеров, это приведет к сбою
  • Вы не проверяете границы на n, поэтому, если ваш текстовый файл длиннее 4 строк, он вылетит
  • Строка n + 1 нена самом деле ничего не делать, это должно быть n += 1
  • line.replace не выполняет встроенную замену, он возвращает новую строку.

Так что измените его на line = line.replace(...).

Я не знаю, чего вы пытаетесь достичь.Эта программа заменяет a в строке 1 на a_replaced, b в строке 2 на b_replaced, c в строке 3 на c_replaced и d в строке 4 на d_replaced.

replacements = [('a', 'a_replaced'), ('b', 'b_replaced'), ('c', 'c_replaced'), ('d', 'd_replaced')]
text = open(textfile, 'r')
n = 0
for line in  text:
    if n >= len(replacements):
        break
    print line[:-1].replace(replacements[n][0], replacements[n][1])
    n += 1 

Однако, если вы пытаетесь применить все замены в каждой строке, вот как:

replacements = [('a', 'a_replaced'), ('b', 'b_replaced'), ('c', 'c_replaced'), ('d', 'd_replaced')]
text = open(textfile, 'r')
for line in  text:
    line = line[:-1]
    for oldtext, newtext in replacements:
        line = line.replace(oldtext, newtext)
    print line

Или более короткая версия вышеуказанной программы:

replacements = [('a', 'a_replaced'), ('b', 'b_replaced'), ('c', 'c_replaced'), ('d', 'd_replaced')]
text = open(textfile, 'r').read()
for oldtext, newtext in replacements:
    text = text.replace(oldtext, newtext)
print text,
0 голосов
/ 23 июня 2011

Я думаю, что это то, чего вы пытаетесь достичь, хотя трудно сказать по предоставленному вами коду:

list1 = ['a', 'b', 'c', 'd']
list2 = ['a_replaced', 'b_replaced', 'c_replaced', 'd_replaced']
text = open(textfile, 'r')
for line in text:
    for index, old in enumerate(list1):
        line = line.replace(old, list2[index])
    print line
text.close()

Это должно сработать.Комментарий для уточнения

0 голосов
/ 23 июня 2011

replace не изменяет строку, она возвращает копию измененной строки.

line = line.replace(col[n], outcol[n])
0 голосов
/ 23 июня 2011

replace возвращает новую строку.Вам нужно line = line.replace(col[n], outcol[n]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...