remove一行代码为什么会出错,请教(语言-python)



```poke = []
a = ['♠', '♥', '♦', '♣']
b = ['A', "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
for i in range(4):
    for j in range(13):
        poke.append(a[i] + b[j])
poke.append('JOKER')
poke.append('joker')
liss = []
liss.append(random.sample(poke, 17))
print(liss)
for i in liss:
     poke.remove(i)


系统提示,x not in  the list

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在您的代码中,liss 是一个包含一个列表的列表,即 [[选出的17张牌]]。因此,在 for 循环中,i 实际上是一个列表,而不是单个元素。当您尝试将 ipoke 列表中删除时,会出现 x not in the list 的错误,因为 poke 列表中并没有一个与 i 相同的列表对象。

为了解决这个问题,您可以使用 extend() 方法将 liss 列表中的元素直接添加到 poke 列表中,而不是将 liss 列表作为一个元素添加到 poke 列表中。修改后的代码如下所示:

import random

poke = []
a = ['♠', '♥', '♦', '♣']
b = ['A', "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
for i in range(4):
    for j in range(13):
        poke.append(a[i] + b[j])
poke.append('JOKER')
poke.append('joker')

liss = []
liss.extend(random.sample(poke, 17))
print(liss)

for i in liss:
     poke.remove(i)

print(poke)

在修改后的代码中,使用 extend() 方法将 liss 列表中的元素添加到 poke 列表中。然后,循环中的 i 就变成了一个单独的字符串元素,可以正确地从 poke 列表中删除。

希望这能帮助您解决问题。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

你的 liss 是 [[]] 结构的二维列表

for i in liss 是得到内层列表

poke 推测是一维列表,所哟。。。。

  • 建议你看下这篇博客👉 :Python 使用del函数和remove函数注意点
  • 除此之外, 这篇博客: 人工智能面试总结-Python中的 说说Python 列表的 del,remove和 pop 等用法和区别? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  1.pop

     1)value = List.pop(index)

     2)pop按照索引位置删除元素

     3)无参数时默认删除最后一个元素

     4)返回删除的元素值

     2.remove

     1)remove 按照值删除,删除单个元素

     2)删除首个符合条件的元素

     3)返回值为空 None

     3.del

     1)根据索引位置来删除单个值或指定范围内的值。

     2)del是删除引用(变量)而不是删除对象(数据),对象由自动垃圾回收机制(GC)删除