Python Append()和pop()问题

Python Append()和pop()问题,python,Python,当我试图从列表中弹出X张卡片时,它说我不能从空列表中弹出,但我确信列表应该是满的!还有别的办法吗 while len(dogs) > 0: for i in range(0,CardAmount): playersDeck.append(dogs.pop(0)) computersDeck

当我试图从列表中弹出X张卡片时,它说我不能从空列表中弹出,但我确信列表应该是满的!还有别的办法吗

while len(dogs) > 0:                                      
    for i in range(0,CardAmount):                         
        playersDeck.append(dogs.pop(0))                   
        computersDeck.append(dogs.pop(0)) 
完整代码:

Dogs.txt文件:

控制台中的错误:

playersDeck.append(dogs.pop(0))
IndexError: pop from empty list

在while循环的每次迭代中,您都会给
playersDeck
提供
cardamunt
卡数,给
computerDeck
提供
cardamunt
卡数,因此您至少需要
2*cardamunt
才能进行循环

因此,与其检查
if len(dogs)>0
,不如检查
if len(dogs)>=2*cardaument
,这样就可以进行循环

while len(dogs) >= 2*CardAmount:                                      
    for i in range(0, CardAmount):                         
        playersDeck.append(dogs.pop(0))                   
        computersDeck.append(dogs.pop(0)) 
顺便说一句,与其在循环中执行pop,不如执行以下操作:

while len(dogs) >= 2*CardAmount:
    playersDeck.append(dogs[:2*CardAmount:2])    # even poitions
    computerDeck.append(dogs[1:2*CardAmount:2])  # odd positons
    dogs = dogs[2*CardAmount:]                   # update dogs

您正在while循环中检查
dogs
,但是您有一个for循环没有检查它。如果
dogs
包含的元素少于
cardamunt
的两倍(因为在for循环中,您会弹出两次),您将遇到问题(这就是您实际看到的)。要解决此问题,您可以在while循环中执行以下检查:
while len(dogs)>2*cardamunit:
您正在
pop
ping两次并检查一次。这是一种糟糕的做事方式