Подтвердить что ты не робот

Вставьте некоторую строку в заданную строку при заданном индексе в Python

Я новичок в Python сталкивается с проблемой: как вставить некоторые поля в уже существующую строку?

Например, предположим, что я прочитал одну строку из любого файла, который содержит:

line = "Name Age Group Class Profession"

Теперь я должен вставить третье поле (группа) в 3 раза больше в той же строке перед полем класса. Это означает, что выходная строка должна быть:

output_line = "Name Age Group Group Group Group Class Profession"

Я могу легко получить 3-е поле (используя метод split), но, пожалуйста, дайте мне знать самый простой способ вставки в строку?

4b9b3361

Ответ 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