我想要的是:我希望列表q只出现三次。出现时,系统会提示您选择其中一个列表项。每次选择一个示例时,我希望它消失并且无法再次选择 - 我甚至不想选择它来显示。因此,当选择示例1时,它会显示列表,其中包含示例2和3。然后,接下来选择示例3 - 列表应该显示,之后仅示例2可用。相反,它显示1和2都可用,即使先前已删除1。
所以问题是该项目在删除时不会从列表中永久删除,并且会在下一次打印时返回,这是我不想要的。
for x in range(0,3):
q = ['example 1', 'example 2', 'example 3']
select = raw_input("> ")
if select == "1":
del q[0]
print q
if select == "2":
del q[1]
print q
if select == "3":
del q[2]
print q
似乎有很多关于在Python中从列表中删除内容的问题,但我一直在寻找答案,并且在我的特定情况下还没有找到任何可行的方法。对于任何愚蠢的事先抱歉,我现在只学习了一个月的编程。
答案 0 :(得分:7)
您当前代码的行为方式是因为列表'q'每次都被初始化。那么你删除列表的方式也是错误的。
您的复制/删除语义是指Python中的深层复制概念,这里不适用。
您想在Python中使用字典类型。
def Foo():
q = {1:'example 1', 2:'example 2', 3:'example 3'};
for x in range(0,3):
select = raw_input("> ")
if select == "1":
del q[1]
print q
if select == "2":
del q[2]
print q
if select == "3":
del q[3]
print q
更简洁
def foo():
q = {1:'example 1', 2:'example 2', 3:'example 3'};
for x in range(0,3):
select = raw_input("> ")
del q[int(select)]
print q
答案 1 :(得分:0)
试试这个:
def menu():
q = {1: 'example 1', 2: 'example 2', 3: 'example 3'}
for _ in range(3):
print '\n'.join('{} - {}'.format(*item) for item in sorted(q.items()))
try:
print q.pop(int(raw_input('> ')), "That's not a valid option")
except ValueError:
print "That's not a valid option"
print "No more menu options left!"
答案 2 :(得分:0)
你有没有理由在这里使用del?这似乎太小了,担心明确删除对象。您只需要从列表中删除它们:
q = ['example 1', 'example 2', 'example 3']
while len(q)>0:
try:
select = int(raw_input("> "))
print q.pop(select-1)
except (ValueError, IndexError):
print 'please enter an integer between 1 and 3'