如何解决列表元素 == 0.000 没有被条件语句捕获
我有一个看起来像这样的列表: '''
['X:GLU:422\tX:LYS:410\t0.434\n','X:GLU:422\tX:ILE:424\t0.210\n','X:ARG:414\tX:GLU:422\t0.745\n','X:ASP:421\tX:GLU:422\t0.203\n','X:GLN:411\tX:GLU:422\t0.000\n']
'''
每个元素都是一个字符串,我将其拆分并将字符串的最后一个元素(数字)转换为浮点数:
'''
for contact in contacts:
# get rid of contacts below the cutoff
if float(contact.split()[2]) < cutoff:
contacts.remove(contact)
'''
上面的代码将删除数字低于截止值的列表元素,但不会像上面的最后一个列表元素一样删除数字全为零(0.000)的列表元素。
我专门添加了其他条件来解决零甚至字符串 '0.000' == '0.000' 的条件,但该列表元素永远不会被删除。
唯一有效的是添加以下内容:
'''
test = []
for contact in contacts:
test.append(float(contact.split()[2]))
lowest = min(test)
if lowest == 0:
contacts.remove(contacts[test.index(lowest)])
'''
当第一行应该用零捕获元素时,似乎没有必要。
谢谢!
解决方法
做一些基本的解析 - 特别是,将数字从字符串显式更改为浮点数 - 另外,构建一个新列表而不是修改旧列表:
lst = [
"X:GLU:422\tX:LYS:410\t0.434\n","X:GLU:422\tX:ILE:424\t0.210\n","X:ARG:414\tX:GLU:422\t0.745\n","X:ASP:421\tX:GLU:422\t0.203\n","X:GLN:411\tX:GLU:422\t0.000\n",]
cutoff = 0.3
filtered = []
for e in lst:
e = e.strip()
first,second,num_str = e.split("\t")
num = float(num_str)
if num > cutoff:
filtered.append((first,num))
print(filtered) # [('X:GLU:422','X:LYS:410',0.434),('X:ARG:414','X:GLU:422',0.745)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。