-1

我有这段代码,它将一个数字与域范围内的一个数字(我在代码中称为项目)进行比较,以查看它是否已经存在。如果是,则打印到输出文件,如果不是,则仅打印一次。

问题如何确保如果数字不在域范围之间,则只打印一次。(我使用了真假语句,但这不起作用,因为当它为假时,它会打印几个重复项-在下面的代码上我不确定如何实现,以便它打印一次不在域范围内的数字多次)

for item in lookup[uniprotID]:
    for varain in wholelookup[uniprotID]:
        for names in wholeline[uniprotID]:
            statement=False
    if re.search(r'\d+',varain).group(0)==item and start <= int(item) <= end:
        result = str(int(item) - start + 1)
        if varain in names.split(' '):
            statement = True
            print ">{0} | at position {1} | start= {2}, end= {3} | description: {4} | {5}".format(uniprotID, result, start, end, varain, names)
            if statement == True:
                print(''.join(makeList[start-1:end]))
4

2 回答 2

1

存储不在范围内的值。

stored_prints = {}

if not ( start <= int( item ) <= end ):
    try:
        stored_prints[item]++
    except:
        stored_prints[item] = 1

print stored_prints

不过,您必须对其进行格式化并使其适合您的需要,但是如果我正确理解了您的问题,这应该可以满足您的需要。

于 2012-07-24T20:25:17.573 回答
1

基于此的某些东西可能对您有用:

already_seen = set()
for line in sys.stdin:
   if line not in already_seen:
      already_seen.add(line)
      sys.stdout.write(line)

并不是说如果您的文件很大,您最终可能会为此消耗大量虚拟内存。如果是这样,请查看 anydbm 或布隆过滤器。

于 2012-07-24T20:29:41.490 回答