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

Я маленький новичок, у меня есть список, и мне нужно изменить первый ";" с "\ 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

Ответы [ 4 ]

2 голосов
/ 28 марта 2019

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

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  
['A0A024\n[167;188]22;DiPPE', 'A0AV\n[1;25]25;DiWC', 
 'A0AV6\n[38;58]21;Diwc', 'A0AV7\n[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 голос
/ 28 марта 2019

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

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
1 голос
/ 28 марта 2019

Вы можете использовать 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)    
0 голосов
/ 28 марта 2019

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

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;DiPPE\n>A0AV;1;25;25;DiWC\n>A0AV6;38;58;21;Diwc\n>A0AV7;408;432;25;Diwc"

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

print(*lista1, sep='\n')

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...