gpt4 book ai didi

python - 按特定列对字符串进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:48 26 4
gpt4 key购买 nike

我需要对文本文件进行排序。该文件包含由新行 '\n' 分隔的行。输入示例:

ATOM   1591  O5'   G A 958       5.497  -3.281   3.598  1.00 99.99           O  
ATOM 1592 C5' G A 958 4.345 -3.184 2.781 1.00 99.99 C
ATOM 1 P C A 924 -12.106 6.485 -14.650 1.00 99.99 P
ATOM 2 OP1 C A 924 -12.981 6.565 -15.850 1.00 99.99 O
ATOM 3 OP2 C A 924 -10.829 7.256 -14.620 1.00 99.99 O
ATOM 429 2H4 C A 947 1.295 -1.142 -0.764 1.00 99.99 H
ATOM 430 P G A 948 -2.886 -4.112 7.863 1.00 99.99 P

我想按第 6 列(958924 等)对它们进行排序

ATOM      1  P     C A 924     -12.106   6.485 -14.650  1.00 99.99           P  
ATOM 2 OP1 C A 924 -12.981 6.565 -15.850 1.00 99.99 O
ATOM 3 OP2 C A 924 -10.829 7.256 -14.620 1.00 99.99 O
ATOM 429 2H4 C A 947 1.295 -1.142 -0.764 1.00 99.99 H
ATOM 430 P G A 948 -2.886 -4.112 7.863 1.00 99.99 P
ATOM 1591 O5' G A 958 5.497 -3.281 3.598 1.00 99.99 O
ATOM 1592 C5' G A 958 4.345 -3.184 2.781 1.00 99.99 C

我试过这样做:

splitted = pdb_data.splitlines()
sorted(splitted, key = lambda residue: int(residue.split()[5]))
pdb_data = '\n'.join(splitted)
pdb_data +='\nTER\n'

但它没有排序。 :-/

最佳答案

您使用了错误的排序方法;要就地排序,请使用 list.sort() method :

splitted.sort(key = lambda residue: int(residue.split()[5]))

sorted() function返回一个新列表,使原始列表未排序,但您的代码会忽略返回值。

您还可以将 sorted() 的返回值分配回 splitted,但这样做效率很低。

您的排序本身工作得很好:

>>> splitted = '''\
... ATOM 1591 O5' G A 958 5.497 -3.281 3.598 1.00 99.99 O
... ATOM 1592 C5' G A 958 4.345 -3.184 2.781 1.00 99.99 C
... ATOM 1 P C A 924 -12.106 6.485 -14.650 1.00 99.99 P
... ATOM 2 OP1 C A 924 -12.981 6.565 -15.850 1.00 99.99 O
... ATOM 3 OP2 C A 924 -10.829 7.256 -14.620 1.00 99.99 O
... ATOM 429 2H4 C A 947 1.295 -1.142 -0.764 1.00 99.99 H
... ATOM 430 P G A 948 -2.886 -4.112 7.863 1.00 99.99 P
... '''.splitlines()
>>> splitted.sort(key = lambda residue: int(residue.split()[5]))
>>> pdb_data = '\n'.join(splitted)
>>> print pdb_data
ATOM 1 P C A 924 -12.106 6.485 -14.650 1.00 99.99 P
ATOM 2 OP1 C A 924 -12.981 6.565 -15.850 1.00 99.99 O
ATOM 3 OP2 C A 924 -10.829 7.256 -14.620 1.00 99.99 O
ATOM 429 2H4 C A 947 1.295 -1.142 -0.764 1.00 99.99 H
ATOM 430 P G A 948 -2.886 -4.112 7.863 1.00 99.99 P
ATOM 1591 O5' G A 958 5.497 -3.281 3.598 1.00 99.99 O
ATOM 1592 C5' G A 958 4.345 -3.184 2.781 1.00 99.99 C

关于python - 按特定列对字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com