如何处理空列表,python3
how to handle an empty list, python3
我有一个创建氨基酸列表 (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
您的列表为空,因此 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
不是候选人,则不会将任何内容添加到您的列表中。
我有一个创建氨基酸列表 (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
您的列表为空,因此 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
不是候选人,则不会将任何内容添加到您的列表中。