Python如果a = this或this或this

时间:2014-01-21 15:36:31

标签: python

如果我有一个功能:

if a_string == "a" or a_string == "b" or a_string == "c":
    # do this

如果没有重复或陈述,我怎么能以不同的方式写出来?或者这是最好的方式?

5 个答案:

答案 0 :(得分:9)

if a_string in ["a", "b", "c"]:
    # do stuff

确保在条件中使用==,而不是=,否则Python会抛出错误

编辑:正如Nigel Tufnel在答案中指出的那样,您还可以检查set中的成员资格,例如{'a', 'b', 'c'}。我相信这实际上通常更快,但如果你在列表/集合中只有三件事情,实际上并不重要。

答案 1 :(得分:5)

您可以测试列表成员资格:

if a_string in ["a", "b", "c"]:
    # do your thing

或者您可以测试一组会员资格:

if a_string in {"a", "b", "c"}:
    # do your thing

或者您可以测试元组成员资格:

if a_string in ("a", "b", "c"):
    # do your thing

我认为list方式是最pythonic的方式,set方式是最正确的方式,tuple方式是最古怪的方式。

编辑:正如DSM和iCodez指出我错了:tuple方式是最快的(可能不是,参见编辑#2)和最pythonic方式。生活和学习!

编辑#2:我知道自从阿道夫希特勒以来,微基准测试是最邪恶的事情,但无论如何我都会发布它:

python -O -m timeit '"c" in ("a", "b", "c")'
10000000 loops, best of 3: 0.0709 usec per loop

python -O -m timeit '"c" in ["a", "b", "c"]'
10000000 loops, best of 3: 0.0703 usec per loop

python -O -m timeit '"c" in {"a", "b", "c"}'
10000000 loops, best of 3: 0.184 usec per loop

我不会解释timeit结果,但set时间相当特殊(可能是因为,呃,我不会解释结果)。

答案 2 :(得分:0)

尝试:

if a_string in ["a", "b", "c"]:
    do this

答案 3 :(得分:0)

if a_string in ("a", "b", "c"):
    # do this

你的例子中有错误。 “if”语句中不允许赋值“=”。你应该使用“==”。

答案 4 :(得分:0)

要添加到上一个,在检查字符串中单个字符的特定情况下,您可以这样做:

if a_string in "abc":

另一个你可能会发现有用的类似成语是:

而不是:

if a_string == "abcdefg" or b_string == "abcdefg" or c_string == "abcdefg":

你可以这样做:

if any(i == "abcdefg" for i in (a_string, b_string, c_string)):