Python3列表报错:'str'对象无法解释为整数,求解决方案
解决Python列表pop()报错:'str' object cannot be interpreted as an integer
嘿,我来帮你搞定这个问题!先拆解下你代码里的问题出在哪:
你写的lol.pop(lol[lol.index(k)])这里,lol.index(k)已经返回了元素k在列表里的整数索引,但你又用这个索引去取列表里的元素(也就是lol[整数索引]),得到的是一个字符串(比如'1c'),而pop()方法需要传入的是整数类型的索引,把字符串传进去自然就触发报错啦。
给你几个实用的解决方案:
方案1:简化pop的参数
直接用lol.index(k)作为pop()的参数就行,完全不需要多套一层lol[]:
import random lol = ['1c','2c','3c'] k = lol[random.randrange(len(lol))] lol.pop(lol.index(k)) print(lol)
方案2:直接保存随机索引(更高效)
既然你已经用random.randrange(len(lol))生成了随机索引,不如直接把这个索引存下来,这样能避免额外调用index()查找的开销,逻辑也更清晰:
import random lol = ['1c','2c','3c'] # 先存储随机索引 random_idx = random.randrange(len(lol)) # 通过索引拿到目标元素k k = lol[random_idx] # 用索引直接删除元素 lol.pop(random_idx) print(lol)
方案3:用random.choice()+remove()(更简洁)
如果你的列表里没有重复元素,用random.choice()直接随机选取元素,再用remove()删掉它,代码会更易读:
import random lol = ['1c','2c','3c'] k = random.choice(lol) lol.remove(k) print(lol)
这三个方案都能解决你的问题,你可以根据自己的需求挑选~
内容的提问来源于stack exchange,提问作者Abel Hristodor
相关产品推荐
相关产品推荐

