#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]'
.