如果我有一个功能:
if a_string == "a" or a_string == "b" or a_string == "c":
# do this
如果没有重复或陈述,我怎么能以不同的方式写出来?或者这是最好的方式?
答案 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
方式是最古怪的方式。
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)):