2012-04-27 2 views
1

У меня есть позиции в списке. Они рассказывают, куда вставить что-то в строку. строка, например:Искать в строке и вставить текст

s = "Hello World and foo bar" 

Список позиций:

list = ['0', '5', '23'] 
pos = list[0], etc. 

Я вставит эти:

ins_list = ['BIG', 'BAD', 'WOLF'] 

результат:

result = BIGHelloBAD World and foo barWOLF 

Когда я использовал файл , I j ust file.seek (pos), но когда я хочу записать его в строке, я не могу использовать поиск. Существует ли эквивалентный метод?

Спасибо, (возможно, я почел позицию неправильно, но это еще не проблема здесь)

ответ

1

строки Python неизменно поэтому подход с искать/писать не будет работать. Используйте срезы.

1

Если позиции не являются целыми числами (как в вашем случае), они должны быть преобразованы в целые числа. Я использовал целые числа в pos_list:

s = "Hello World and foo bar" 
pos_list = [0, 5, 23] 
ins_list = ['BIG', 'BAD', 'WOLF'] 

p1 = 0 
lst = [] 
for p2, text in zip(pos_list, ins_list): 
    lst.append(s[p1:p2]) 
    lst.append(text) 
    p1 = p2 
lst.append(s[p1:]) 
result = ''.join(lst) 

print(result) 

ЗИП() принимает два или более последовательностей и возвращает пары (кортежи) с соответствующими элементами. Строки неизменны, как упоминалось в randcoder. Когда вы изменяете строку, вы фактически создаете новую, модифицированную. Из-за этого обычной практикой является сбор фрагментов строки в списке. Наконец, список соединяется с результирующей строкой.

1

Благодаря randcoder, ломтики работать как шарм:

...loop: 

part1 = s[:pos] 
part2 = s[pos:] 
s = part1 + ins_list[n] + part2 
+0

, но проблема в том, что в вашем случае, вы будете в конечном итоге с этой строкой ' 'BIGHeBADllo World и fWOLFoo bar'', а не результат вы показали. –

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