真的,真的从Python的循环列表中删除一个项目

2024-04-19 13:26:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要的是:我想要列表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中,似乎有很多关于从列表中删除内容的问题,但是我已经寻找了好几天的答案,还没有找到任何适合我的特定情况的方法。我为自己的愚蠢提前道歉,我学编程才一个月。你知道吗


Tags: 项目in示例列表forifexample系统
3条回答

试试这个:

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!"

你在这里用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'

之所以您当前的代码会这样做,是因为列表“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

相关问题 更多 >