我有两个值,例如a = 972和b = 11188。我想从两个数字之间的选项卡划界文本文件中获取所有条目的详细信息。Python比较操作员< = and> =返回错误的结果。
我在if语句中使用了<=
和>=
运算符。
if l1[3]<="18188" >="900" and l1[2]=="1":
,它什么也没返回。当我写
时if l1[3]<="18188":
它返回" 18166和11188作为输出"。理想情况下,如果功能必须返回" 11188、972和3632"。
这是选项卡划界文件。
SRR6298199.1 16 1 3632 0 50M32S * 0 0 AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCC !!""""!"!"!"!!"!!!""""""!!!""""!"" NM:i:1 AS:i:48 XS:i:47
SRR6298199.10 0 1 972 0 40M274S * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATCAATTTGAA !"""'$""!"!"""" NM:i:0 AS:i:40 XS:i:40 XP:Z:3,+18166143,41S36M237S,0,0;
SRR6298199.10 0 1 18166 0 41S36M237S * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATCAATTT !"""!#!#$#$"!"""" NM:i:0 AS:i:36 XS:i:34 XP:Z:2,+9723273,40M274S,0,0;
SRR6298199.11 16 1 11188 0 1841S9M * 0 0 GACCAGTATCGGGCCGGCATAAGCCTCGAATTTCACCAGCA !!!!!!""!#!"%%&)(%-//.//,".,.+.-..&! NM:i:18 AS:i:81 XS:i:81
这是完整的代码。请弄清楚为什么此代码不返回真实结果。
# EXTRACTING THE DETAILS OF READS ALIGNED ON CHR_1
fr=open("Sample.txt","r")
z=fr.read()
bz=z.split("n")
temp1=[]
for bases in bz:
temp1.append(bases.split("t"))
cc1=[]
se=[] #READ NAMES ALIGNED ON CHR_1
chr2=[] #READ NAMES ALIGNED ON CHR_2
for l1 in temp1:
if l1[3]<="18188" >="900" and l1[2]=="1":
#print(l1[3])
#cc1.append("@"+str(l1[0])+"t"+"length="+str(len(l1[9]))+"n"+l1[9]+"n"+"+"+l1[0]+"t"+"length="+str(len(l1[9]))+"n"+l1[10])
cc1.append("@"+str(l1[0])+" "+"/1"+"n"+"+"+"n"+l1[9])
print(cc1)
我希望if l1[3]<="18188" >="900" and l1[2]=="1":
的输出为
['SRR6298199.1', '16', '1', '3632', '0', '50M32S', '*', '0', '0', 'AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCC', '!!""""!"!"!"!!"!!!""""""!!!""""!""', 'NM:i:1', 'AS:i:48', 'XS:i:47']
['SRR6298199.10', '0', '1', '972', '0', '40M274S', '*', '0', '0', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATCAATTTGAA', '!"""'$""!"!""""', 'NM:i:0', 'AS:i:40', 'XS:i:40', 'XP:Z:3,+18166143,41S36M237S,0,0;']
['SRR6298199.11', '16', '1', '11188', '0', '1841S9M', '*', '0', '0', 'GACCAGTATCGGGCCGGCATAAGCCTCGAATTTCACCAGCA', '!!!!!!""!#!"%%&)(%-//.//,".,.+.-..&!', 'NM:i:18', 'AS:i:81', 'XS:i:81']
['SRR6298199.10', '0', '1', '18166', '0', '41S36M237S', '*', '0', '0', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATCAATTT', '!"""!#!#$#$"!""""', 'NM:i:0', 'AS:i:36', 'XS:i:34', 'XP:Z:2,+9723273,40M274S,0,0;']
但是,如果语句返回[]
,则上述为空列表
两个问题:
1(您滥用/误差比较器
if l1[3]<= "18188" >="900" and l1[2]=="1": # always false becase "1..." is never >= "9.."
很可能应该是
if "900"<= l1[3] <="18188" and l1[2]=="1":
2(您使用词典法比较来比较数字 - 这将失败,因为在词典比较中,"9"
更大,而"1111111"
您可以使用正确的比较语法和float-values来修复两个错误,以进行比较:
if 900 <= float(l1[3]) <= 18188 and l1[2]=="1":