在PYTHON中,如何替换列表中每行的第一个元素?

2024-09-28 17:26:37 发布

您现在位置: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

Tags: 列表replaceprint初学者strlistalista1a0av6
3条回答

创建数据

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

您可以拆分;上的每一行,并通过格式化部分来创建新行:

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

可以使用str.replacelist comprehension。你知道吗

  • 第一个替换将所有';'替换为']'

  • 第二个将前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)    

相关问题 更多 >