0

我想要什么:我希望列表 q 只出现 3 次。当它出现时,系统会提示您选择列表项之一。每次选择一个示例时,我都希望它消失并且无法再次选择 - 我什至不希望显示选择它的选项。So, when example 1 is selected, it then displays the list with examples 2 and 3 available. 然后,假设接下来选择示例 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 中的列表中删除内容的问题,但我一直在寻找答案好几天了,还没有找到适合我的特殊情况的任何东西。对于任何愚蠢,我提前道歉,我现在才学习编程一个月。

4

3 回答 3

7

您当前代码的行为方式是因为 list '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
于 2013-02-22T03:05:43.093 回答
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'
于 2013-02-22T06:19:24.493 回答
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!"
于 2013-02-22T04:23:15.063 回答