我有一个创建氨基酸列表(aaCandidates)的函数,但这个列表甚至可以为空。如果此列表为空,我想跳过该步骤并继续执行以下步骤。
我的代码是:
def magicfunction(referenceDistance,referenceAA):
amminoacids = ('A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I', 'L', 'K', 'M', 'F', 'P', 'S', 'T', 'W', 'Y', 'V')
aaCandidates = list()
for aa in amminoacids:
if distance(aa,referenceAA) == referenceDistance:
aaCandidates.append(aa)
if not aaCandidates:
break
luckyAA = choice(aaCandidates)
return(luckyAA)
我在另一个文件中调用此函数,如下所示:
for i in range(lenghtPairs):
r1 = randrange(20)
r2 = randrange(20)
coppie.append([aminoacidi[r1], aminoacidi[r2]])
for i in range(lenghtPairs):
dictionary = dict()
frequenze = dict()
if i == 0:
a = randrange(20)
b = randrange(20)
pairs[0] = [aminoacids[a], aminoacids[b]]
else:
c = randrange(20)
pairs[i][0] = aminoacids[c]
distanceNeighbours = distance(pairs[i][0],pairs[i-1][0])
aaChosen = magicfunction(distanceNeighbours,pairs[i-1][1])
pairs[i][1] = aaChosen
print(i + 1)
我试过条件=> if not aaCandidates: break
但它不起作用:
File "/.../lib/python3.4/random.py", line 255, in choice
raise IndexError('Cannot choose from an empty sequence')
IndexError: Cannot choose from an empty sequence
答案 0 :(得分:1)
您的列表为空,因此random.choice()
失败。当列表为空时,你需要决定做什么而不是,但是在for
循环的外,所以当列表有完成建筑:
for aa in amminoacids:
if distance(aa,referenceAA) == referenceDistance:
aaCandidates.append(aa)
if not aaCandidates:
return 'some default choice'
luckyAA = choice(aaCandidates)
return luckyAA
将break
放入循环的所有操作都是为了确保如果第一个aa
不是候选者,则不会将任何内容添加到列表中。