当元素包含在变量中时,如何从Python列表中删除元素

时间:2019-01-10 01:57:22

标签: python list

我是编程新手,刚刚完成UNI的第一学期课程。在处理我课程的最后细节时,我遇到了一个挑战,我还没有找到关于堆栈溢出的答案。

我有一个名为cL(coloursList)的列表,并试图从该列表中删除一个元素,该元素包含在名为“ colour2”的变量中,该变量由用户使用“ input”通过外壳输入方法。

我发现通过引用元素本身(通过提供元素名称作为字符串)或元素的索引位置来使用list.remove(x)或list.pop(x)从列表中删除元素的方法在列表中。

这就是我正在使用的代码的样子:

    # more code before this

    cL = ["red", "green", "blue", "magenta", "orange", "pink"]

    elif colour2 == colour1:
        cL = cL.remove(colour2)
        print("\nPlease select a different colour than previous one:\n", cL) 
        colour2 = str(input("Please re-enter second colour: "))

    # more code to follow

基本上我要在这里实现的是,当用户输入第二种或第三种颜色时,会在外壳中提示他,如果他输入了以前从列表中使用过的颜色,则尝试删除从列表中选择该颜色,然后向用户显示新的修改后的列表,这样他就知道自己剩下的颜色可供选择。

很显然,我尝试的这段代码不起作用

cL = cL.remove(colour2)

并且正在尝试查看完成此任务有哪些选择。

非常感谢您!

*******更新包含完整代码(适用于犯罪分子)*******

*******在STACK OVERFLOW社区的帮助下完成了任务*******

    cL = ["red", "green", "blue", "magenta", "orange", "pink"]

print("\nAvailable colours to choose from:\n", cL)
colour1 = str(input("Please enter FIRST colour: ")).lower()
while True:
    if colour1 not in cL:
        print("\nInvalid colour.\nPlease choose a colour from list:\n", cL)
        colour1 = str(input("Please re-enter a valid FIRST colour: "))\
                      .lower()
    else:
        cL.remove(colour1)
        break

print("\nGREAT WORK! Remaining valid colours to choose from are:\n", cL)        
colour2 = str(input("Please enter SECOND colour: ")).lower()
while True:
    if colour2 not in cL:
        print("\nInvalid colour.\nPlease choose a colour from list:\n", cL)
        colour2 = str(input("Please re-enter a valid SECOND colour: "))\
                      .lower()
    else:
        cL.remove(colour2)
        break

这是我完成的颜色输入验证代码的样子(用于第一和第二种颜色)。认为这可能有助于将来完成类似任务的人。

*颜色输入可以是[小写],[大写]或[混合],除非用户在选择任何一种颜色之前选择呈现给他的一种颜色,否则他将被卡在循环,要求他从提供的列表中选择有效的颜色。

4 个答案:

答案 0 :(得分:2)

你快到了。

方法list.remove()修改列表,但不返回修改后的列表本身。

因此,如果您执行以下操作:

cL.remove(colour2)
print(cL)

它应该给您想要的答复。

答案 1 :(得分:1)

另一种方法:

colour2 = str(input("Please re-enter second colour: "))    
cL = [x for x in cL if x != colour2]

答案 2 :(得分:1)

由于您不仅限于colour2,而且希望多次这样做,因此我提供了一种更通用的解决方案,该解决方案适用于任意数量的输入,除非您输入q

cL = ["red", "green", "blue", "magenta", "orange", "pink"]
deleted = []

while True:
    colour = input("Please enter a colour to delete: (press q to quit)")
    if colour == 'q':
        break
    if colour not in deleted:
        cL.remove(colour)
        deleted.append(colour)
    else:
        print ("%s already deleted. Try entering another color" %colour)

示例输出

Please enter a colour to delete: (press q to quit)red
Please enter a colour to delete: (press q to quit)red
red already deleted. Try entering another color
Please enter a colour to delete: (press q to quit)green
Please enter a colour to delete: (press q to quit)pink
Please enter a colour to delete: (press q to quit)red
red already deleted. Try entering another color
Please enter a colour to delete: (press q to quit)green
green already deleted. Try entering another color
Please enter a colour to delete: (press q to quit)q

答案 3 :(得分:0)

因此,据我了解,您有一个颜色列表,并且您希望用户开始从该列表中选择颜色,并且如果用户选择的颜色不在列表中,或者已经选择了一种颜色,它应该告诉他选择其他颜色。

如果是这种情况,它将是这样

colors_list = ["red", "green", "blue", "magenta", "orange", "pink"]
colors_chosen = []

while colors_list:
    print("Please select a color from this list: {}".format(colors_list))
    color_selected = input()

    while color_selected not in colors_list:
        print("The color selected is not one of the options")
        print("Please select a color from this list: {}".format(colors_list))
        color_selected = input()

    colors_list.remove(color_selected)
    colors_chosen.append(color_selected)

print("These are the colors you chose: {}".format(colors_chosen))

所以我们正在做的是拥有所有可能颜色的列表,并且正在使用一个循环,该循环将在此列表不为空的情况下重复进行(如果您将while循环替换为for循环,只希望用户选择n种颜色而不是所有颜色)。在该循环内,我们将询问用户颜色,如果不是列表内的颜色,它将进入while循环,直到用户选择列表内的有效颜色。一旦用户选择了有效的颜色,我们将从列表中删除该颜色,并将其添加到列表中,以存储用户选择的颜色。重复此过程,直到颜色列表为空为止。

如果用户键入的不是颜色(例如“汽车”或类似名称),或者键入的是先前选择的颜色,则可能要显示不同的消息。为此,您需要检查用户键入的单词是否不在颜色列表中,而是在所选单词列表中,然后打印“您不能选择已经选择的单词!”,如果它不在两个列表中,则打印“您必须选择一种实际的颜色!”。

希望有帮助!