Как я могу заменить первый элемент каждой строки в списке на PYTHON?

#python #replace

#python #заменить

Вопрос:

Я немного новичок, у меня есть список, и мне нужно изменить первый «;» на «n[» , а третий «;» на «]» у меня есть это:

 print(lista)

>A0A024;167;188;22;DiPPE
>A0AV;1;25;25;DiWC
>A0AV6;38;58;21;Diwc
>A0AV7;408;432;25;Diwc
  

я пытаюсь:

 lista1=str(lista).replace(";","n[",1)   
  

но замените только первый элемент в списке:

 >A0A024
[167;188;22;DiPPE
>A0AV;1;25;25;DiWC
>A0AV6;38;58;21;DiwC
>A0AV7;408;432;25;DiwC
  

необходимо быть:

 >A0A024
[167;188]22;DiPPE
>A0AV
[1;25]25;DiWC
>A0AV6
[38;58]21;DiwC
>A0AV7
[408;432]25;DiwC
  

Комментарии:

1. Не вызывайте свои переменные list,set,dict,tuple.avg,min,max,... вы затеняете встроенные функции

Ответ №1:

Создайте данные

 parts = """A0A024;167;188;22;DiPPE
A0AV;1;25;25;DiWC
A0AV6;38;58;21;Diwc
A0AV7;408;432;25;Diwc""".split("n")
  

Просмотрите данные строк, разделите на ; и рекомбинируйте по желанию:

 for idx,line in enumerate(parts):
    # make it a list without any ;
    pp = line.split(";")
    # make it a string and reassign into parts
    parts[idx]= pp[0]   "n["   pp[1]   ";"   pp[2]   "]"   ";".join(pp[3:])

print(parts)

for p in parts:
    print(p)
  

Вывод:

 # data as list  
['A0A024n[167;188]22;DiPPE', 'A0AVn[1;25]25;DiWC', 
 'A0AV6n[38;58]21;Diwc', 'A0AV7n[408;432]25;Diwc']

# data linewise 
A0A024
[167;188]22;DiPPE
A0AV
[1;25]25;DiWC
A0AV6
[38;58]21;Diwc
A0AV7
[408;432]25;Diwc
  

Комментарии:

1. Я предполагаю, что > в статистике ваших данных осталось от ваших первых попыток редактирования, когда они были у вас в цитатах…

Ответ №2:

Вы можете использовать str.replace и понимание списка.

  • Первая замена заменяет все ';' на ']' .

  • Второй заменяет 3 первых ']' на ';' .

  • И последний заменяет первый ';' на 'n[' .

 data = [">A0A024;167;188;22;DiPPE",
        ">A0AV;1;25;25;DiWC",
        ">A0AV6;38;58;21;Diwc",
        ">A0AV7;408;432;25;Diwc"]

res = [s.replace(';', ']').replace(']', ';', 3). replace(';', 'n[', 1) for s in data]

for s in res:
    print(s)    
  

Ответ №3:

Вы можете разбить каждую строку на ; и создать новую строку, отформатировав части:

 def format_line(line):
    return '{0}n[{1};{2}]{3};{4}'.format(*line.split(';'))
  

Используя эту функцию, вы можете сделать:

 data = """A0A024;167;188;22;DiPPE
A0AV;1;25;25;DiWC
A0AV6;38;58;21;Diwc
A0AV7;408;432;25;Diwc"""

lines = data.split('n')
out = 'n'.join([format_line(line) for line in lines])
  

Вывод:

 print(out)

A0A024
[167;188]22;DiPPE
A0AV
[1;25]25;DiWC
A0AV6
[38;58]21;Diwc
A0AV7
[408;432]25;Diwc
  

Ответ №4:

вот решение с re

 import re

# my guess on how lista looks like, it is more useful to show the actual variable, than the output btw.
lista = ">A0A024;167;188;22;DiPPEn>A0AV;1;25;25;DiWCn>A0AV6;38;58;21;Diwcn>A0AV7;408;432;25;Diwc"

lista = lista.split("n")
lista1 = []
for elem in lista:
    lista1.append(re.sub(r'(. ?);(. ?;. ?);', r'1n[2]', elem))

print(*lista1, sep='n')
  

для первого элемента elem в списке r'(. ?);(. ?;. ?);' будет совпадать >A0A024;167;188; , и это заменит каждую из 2 групп ( >A0A024 , и 167;188 ) в соответствии с этим шаблоном r'1n[2]' .