检查列表中的索引是否存在

时间:2016-07-12 21:30:11

标签: python

我想注意我正在使用Discord.py,其中一些包含了lib。

所以我正在尝试检查列表中的索引是否存在,但我不断得到ValueError说我的列表中不存在该索引。

这是我的代码:

def deal_card(self):
        U = self.usedCards
        randCard = randchoice(list(self.cards))
        if not U: #check if it is empty
            #if it is empty, just add the card to used cards
            U.append(randCard)
        elif U.index(randCard): #check if card is already in the list
            #if it is, pick another one
            randCard = randchoice(list(self.cards))
            U.append(randCard)
        else: #check if card is not in list
            #if it is not, just add it to the used cards
            U.append(randCard)
        return randCard

self.cards充满了卡片名称,self.usedCards是randCard选择的卡片列表。 hand是我的命令,P4self.cards

中的一张卡片

我找到了一些解决方案,说添加try块会解决问题,但我不知道如何在if语句中添加它。

提前致谢!

4 个答案:

答案 0 :(得分:4)

list.index()应该用于查找列表成员的索引。要检查列表中的项目是否,只需使用in

if not U:
    # do stuff
elif randCard in U:
    # do other stuff

答案 1 :(得分:2)

这可能是处理你的牌的一种可怕的方法,因为你的牌中你的弃牌堆都有牌。

为什么不直接移动卡片?

import random

cards = ['H{}'.format(val) for val in range(1, 11)]
print(cards)
discard_pile = []

while cards:
    random.shuffle(cards)
    card = cards.pop()
    print('You drew a {}'.format(card))
    discard_pile.append(card)

while discard_pile:
    cards.append(discard_pile.pop())

# or

cards.extend(discard_pile)
discard_pile.clear()

答案 2 :(得分:1)

您不需要使用索引函数:

elif randCard in U:

答案 3 :(得分:1)

如果由于某种原因仍希望使用.index功能而不遵循上述建议,则可以使用try语句,如下所示:

try:
    c = U.index(randCard)
    randCard = randchoice(list(self.cards))
    U.append(randCard)
except ValueError:
    U.append(randCard)