Python新增范围判断提取原子坐标输出空列表问题排查
错误原因
你的判断条件存在两处核心问题,直接导致所有行都匹配失败,最终输出空列表:
- 语法写法错误:Python中用于判断元素是否属于某个序列/范围的合法运算符只有
in,不存在is in这种组合写法,属于无效语法。 - 数据类型不匹配:从文件读取的内容经
split()拆分后,所有元素都是字符串类型,i[5]也不例外;但range(1,288)包含的元素全是整数,字符串和整数的值永远不会相等,就算修正语法问题,判断条件也会始终返回False,无法进入追加坐标的代码分支。
另外还有一个容易遗漏的区间规则问题:Python的range是左闭右开区间,你写range(1,288)实际覆盖的整数范围是1到287,288本身不在判断范围内。
修正方案
- 删除多余的
is关键字,使用正确的in运算符做成员判断 - 做范围判断前,先将
i[5]从字符串转换为整数,解决类型不匹配问题 - 如果需要包含288这个边界值,将range的结束参数设置为289
修正后的判断语句如下:
if i[0]=="ATOM" and i[2]=="CA" and i[4]=="A" and int(i[5]) in range(1, 289):
完整可运行的修正后代码(同步修复了原代码中print语句的缩进问题):
y = [] with open('insert my top secret super file here') as protein: for i in protein: i = i.split() coords = [] if i[0] == "ATOM" and i[2] == "CA" and i[4] == "A" and int(i[5]) in range(1, 289): coords.append(float(i[6])) coords.append(float(i[7])) coords.append(float(i[8])) y.append(coords) print(y)
内容的提问来源于stack exchange,提问作者Judeah Wallace
相关产品推荐
相关产品推荐

