在Python中测试用户输入是否在列表中

3

我需要测试用户输入是否与列表中的元素相同,目前我的做法是:

cars = ("red", "yellow", "blue")
guess = str(input())

if guess == cars[1] or guess == cars[2]:
        print("success!")

但是我正在处理更大的列表,我的if语句随着所有这些检查而变得越来越长,有没有一种方法可以引用多个索引,例如:

if guess == cars[1] or cars[2]

或者

if guess == cars[1,2,3]

在阅读列表文档时,我发现不可能像上面尝试的那样引用多个索引,当然这会导致语法错误。


2
你有意不查看 cars[0] 吗?列表从零开始索引,所以你的三辆车分别是 cars[0]cars[1]cars[2] - RichieHindle
我真的希望你正在使用Python 3.x版本...否则请使用raw_input代替input,并且打印'success!',不要加括号。 - Ant
是的,我知道列表中的0索引,谢谢。而且,是Python 3.1。 - Guillermo Siliceo Trueba
4个回答

12

最简单的方法是:

if guess in cars:
    ...

但是,如果你的列表非常长,这样做会很慢。那么你应该将汽车列表存储在一个集合中:

cars_set = set(cars)
....
if guess in cars_set:
    ...

在集合中检查某个元素是否存在要比在列表中快得多(但只有在有很多项并且您需要多次进行检查时才会成为问题)。

(编辑:我假设问题中省略的cars [0]是一个意外。 如果不是,请改用cars [1:]代替cars。)


我认为你误解了问题。在第一个例子中,如果 guess"red",他的代码不会打印出 "success",但是你的代码会。 - sepp2k
1
这里需要注意的是,虽然集合构建很高效,但如果您只检查列表一次,它可能会成为一个开销点。 - Daenyth
另一方面,也许我误解了,他的示例代码可能只是一个错误。 - sepp2k
谢谢大家,是的,那是个错误,但我会记住的,in 是我需要的 :) - Guillermo Siliceo Trueba

4

使用guess in cars来测试guess是否等于cars中的一个元素:

cars = ("red","yellow","blue")
guess = str(input())

if guess in cars:
        print ("success!")

3

0

@Sean Hobbs: 首先,您需要为变量“index”分配一个值。

index = 0

你可能想使用 while True 来创建无限循环,这样你的代码就会像这样:

while True:

    champ = input("Guess a champion: ")
    champ = str(champ)

    found_champ = False
    for i in listC:
        if champ == i:
            found_champ = True

    if found_champ:
        print("Correct")
    else:
        print("Incorrect")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接