Вставьте некоторую строку в заданную строку при заданном индексе в Python
Я новичок в Python сталкивается с проблемой: как вставить некоторые поля в уже существующую строку?
Например, предположим, что я прочитал одну строку из любого файла, который содержит:
line = "Name Age Group Class Profession"
Теперь я должен вставить третье поле (группа) в 3 раза больше в той же строке перед полем класса. Это означает, что выходная строка должна быть:
output_line = "Name Age Group Group Group Group Class Profession"
Я могу легко получить 3-е поле (используя метод split
), но, пожалуйста, дайте мне знать самый простой способ вставки в строку?
Ответы
Ответ 1
Важным моментом, который часто кусает новых программистов на Python, но другие плакаты явно не явны, это то, что строки в Python неизменяемы - вы не можете когда-либо изменять их на месте.
Вам нужно переучиваться при работе со строками в Python, чтобы вместо того, чтобы думать: "Как я могу изменить эту строку?" вместо этого вы думаете: "Как я могу создать новую строку, в которой есть некоторые фрагменты из этой, которую я уже получил?"
Ответ 2
Для будущих "новичков", решающих эту проблему, я думаю, что быстрый ответ будет подходящим для этой темы.
Как bgporter сказано: строки Python неизменяемы, и поэтому, чтобы изменить строку, вы должны использовать фрагменты, которые у вас уже есть.
В следующем примере я вставляю 'Fu'
in в 'Kong Panda'
, чтобы создать 'Kong Fu Panda'
>>> line = 'Kong Panda'
>>> index = line.find('Panda')
>>> output_line = line[:index] + 'Fu ' + line[index:]
>>> output_line
'Kong Fu Panda'
В приведенном выше примере я использовал значение индекса для "среза" строки в 2 подстроки:
1, содержащий подстроку перед индексом вставки, а другая - остальное.
Затем я просто добавляю нужную строку между двумя и voilà, мы вставили строку внутри другой.
нотация фрагмента Python имеет отличный ответ, объясняющий тему резки строк.
Ответ 3
line='Name Age Group Class Profession'
arr = line.split()
for i in range(3):
arr.insert(2, arr[2])
print(' '.join(arr))
Ответ 4
Я знаю это malapropos, но IMHO простой способ:
def insert (source_str, insert_str, pos):
return source_str[:pos]+insert_str+source_str[pos:]
Ответ 5
Существует несколько способов сделать это:
Один из способов - использовать нарезку:
>>> a="line=Name Age Group Class Profession"
>>> b=a.split()
>>> b[2:2]=[b[2]]*3
>>> b
['line=Name', 'Age', 'Group', 'Group', 'Group', 'Group', 'Class', 'Profession']
>>> a=" ".join(b)
>>> a
'line=Name Age Group Group Group Group Class Profession'
Другим было бы использование регулярных выражений:
>>> import re
>>> a=re.sub(r"(\S+\s+\S+\s+)(\S+\s+)(.*)", r"\1\2\2\2\2\3", a)
>>> a
'line=Name Age Group Group Group Group Class Profession'
Ответ 6
У меня была аналогичная проблема для моего назначения ДНК, и я использовал совет bgporter, чтобы ответить на него. Вот моя функция, которая создает новую строку...
def insert_sequence(str1, str2, int):
""" (str1, str2, int) -> str
Return the DNA sequence obtained by inserting the
second DNA sequence into the first DNA sequence
at the given index.
>>> insert_sequence('CCGG', 'AT', 2)
CCATGG
>>> insert_sequence('CCGG', 'AT', 3)
CCGATG
>>> insert_sequence('CCGG', 'AT', 4)
CCGGAT
>>> insert_sequence('CCGG', 'AT', 0)
ATCCGG
>>> insert_sequence('CCGGAATTGG', 'AT', 6)
CCGGAAATTTGG
"""
str1_split1 = str1[:int]
str1_split2 = str1[int:]
new_string = str1_split1 + str2 + str1_split2
return new_string