如何处理空列表,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 不是候选人,则不会将任何内容添加到您的列表中。