Python-list.remove(x)x不在列表中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python-list.remove(x)x不在列表中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2921字,纯文字阅读大概需要5分钟。
内容图文
我正在尝试在Python 3.3中创建一个简单的程序,该程序采用四个名称的列表,并将它们随机分配给列表中的另一个人.例如,如果名称是John,Aaron,Lydia和Robin:
约翰先走,然后选择一个名字.他不能画自己的东西.如果他这样做,他会把它放回去并再次抽签.说约翰画了罗宾的名字.罗宾的名字将从游泳池中淘汰.接下来是亚伦的抽奖.他画约翰.约翰的名字被淘汰了.等等,直到分配了所有名称.
我创建了一个具有四个名称的列表,并为每个名称分配了一个值1-4.但是,从列表中删除时我遇到了一个问题,说该值不存在.
list.remove(x):x不在列表中.
它看起来像这样:
def drawNames():
import random
John=1
Aaron=2
Lydia=3
Robin=4
validNames=[John, Aaron, Lydia, Robin]
nameDrawn=random.choice(validNames)
def draw():
nameDrawn=random.choice(validNames)
#John's Draw:
draw()
if nameDrawn != 1:
if nameDrawn == 2:
print("John drew: Aaron")
validNames.remove(2)
elif nameDrawn == 3:
print("John drew: Lydia")
validNames.remove(3)
elif nameDrawn == 4:
print("John drew: Robin")
validNames.remove(4)
#Aaron's Draw:
draw()
if nameDrawn !=2:
if nameDrawn ==1:
print("Aaron drew: John")
validNames.remove(1)
elif nameDrawn ==3:
print("Aaron drew: Lydia")
validNames.remove(3)
elif nameDrawn ==4:
print("Aaron drew: Robin")
validNames.remove(4)
#Lydia's Draw:
draw()
if nameDrawn !=3:
if nameDrawn ==1:
print("Lydia drew: John")
validNames.remove(1)
elif nameDrawn ==2:
print("Lydia drew: Aaron")
validNames.remove(2)
elif nameDrawn ==4:
print("Lydia drew: Robin")
validNames.remove(4)
#Robin's Draw:
draw()
if nameDrawn !=4:
if nameDrawn ==1:
print("Robin drew: John")
validNames.remove(1)
elif nameDrawn ==2:
print("Robin drew: Aaron")
validNames.remove(2)
elif nameDrawn ==3:
print("Robin drew: Lydia")
validNames.remove(3)
drawNames()
我也尝试过使用名称而不是数字值,这会产生相同的错误.
我也觉得这是一个低效的方案.如果您有更好的建议,我将非常有义务.
解决方法:
使用下面的代码,可能会获得更好的里程;与上面提供的名称相比,它可以扩展到许多名称.
import copy
import random
validNames=["John", "Aaron", "Lydia", "Robin"]
def drawNames(namelist,currentname):
'''
namelist: list of names to draw from
currentname: name of person doing the current draw
'''
draw_namelist = copy.copy(namelist) # make a copy to remove person drawing if needed
if currentname in draw_namelist: # check if the person drawing is in the list
draw_namelist.remove(currentname) # remove current name if in list
try:
drawn_name = random.choice(draw_namelist)
namelist.remove(drawn_name)
newnamelist = namelist
print "Drew {}".format(drawn_name)
print "New list: {}".format(newnamelist)
except:
print "Nobody for me to draw!"
drawn_name=None
newnamelist = namelist
return drawn_name, newnamelist
然后可以按以下方式工作:
In [39]: newlist=["John", "Aaron", "Lydia", "Robin"]
In [40]: name,newlist = drawNames(newlist,"Lydia")
Drew Robin
New list: ['John', 'Aaron', 'Lydia']
In [41]: name,newlist = drawNames(newlist,"John")
Drew Aaron
New list: ['John', 'Lydia']
In [42]: name,newlist = drawNames(newlist,"Aaron")
Drew John
New list: ['Lydia']
In [43]: name,newlist = drawNames(newlist,"Robin")
Drew Lydia
New list: []
内容总结
以上是互联网集市为您收集整理的Python-list.remove(x)x不在列表中全部内容,希望文章能够帮你解决Python-list.remove(x)x不在列表中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。