Python如果a=this或this或this
如果我有一个函数:Python如果a=this或this或this,python,Python,如果我有一个函数: if a_string == "a" or a_string == "b" or a_string == "c": # do this 如果没有重复或重复的陈述,我怎么能写得不同呢?还是这是最好的方式 if a_string in ["a", "b", "c"]: # do stuff 确保在您的条件中使用=,而不是=,否则Python将抛出错误 编辑:正如Nigel Tufnel在他的回答中指出的,你也可以检查集合中的成员身份,例如{'a','b','c
if a_string == "a" or a_string == "b" or a_string == "c":
# do this
如果没有重复或重复的陈述,我怎么能写得不同呢?还是这是最好的方式
if a_string in ["a", "b", "c"]:
# do stuff
确保在您的条件中使用=
,而不是=
,否则Python将抛出错误
编辑:正如Nigel Tufnel在他的回答中指出的,你也可以检查集合
中的成员身份,例如{'a','b','c'}
。我相信这实际上在总体上是更快的,尽管实际上如果你在列表/集合中只有三件事情,这并不重要
确保在您的条件中使用=
,而不是=
,否则Python将抛出错误
编辑:正如Nigel Tufnel在他的回答中指出的,你也可以检查集合
中的成员身份,例如{'a','b','c'}
。我相信这实际上在总体上更快,尽管如果列表/集合中只有三件事实际上并不重要。试试:
if a_string in ["a", "b", "c"]:
do this
尝试:
您可以测试列表成员资格:
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
或者,您可以测试集合成员资格:
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
或者,您可以测试元组成员资格:
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
我认为列表
方式是最具python风格的方式,集合
方式是最正确的方式,元组
方式是最古怪的方式
编辑:正如DSM和iCodez指出的那样,我错了:tuple
方式是最快的(可能不是,请参见编辑#2)和最具python风格的方式。活到老学到老
编辑#2:我知道微博客是自阿道夫·希特勒(Adolf Hitler)以来最邪恶的事情,但我还是要发布它:
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
的计时非常特殊(可能是因为,呃,我不会解释结果)。您可以测试列表成员资格:
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
或者,您可以测试集合成员资格:
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
或者,您可以测试元组成员资格:
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
我认为列表
方式是最具python风格的方式,集合
方式是最正确的方式,元组
方式是最古怪的方式
编辑:正如DSM和iCodez指出的那样,我错了:tuple
方式是最快的(可能不是,请参见编辑#2)和最具python风格的方式。活到老学到老
编辑#2:我知道微博客是自阿道夫·希特勒(Adolf Hitler)以来最邪恶的事情,但我还是要发布它:
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
时间是非常特殊的(可能是因为,呃,我不会解释结果)
你的例子中有一个错误。“if”语句中不允许赋值“=”。您应该使用“==”
你的例子中有一个错误。“if”语句中不允许赋值“=”。您应该使用“==”添加到上一个,在检查字符串中单个字符的特定情况下,您可以执行以下操作:
if a_string in "abc":
if any(i == "abcdefg" for i in (a_string, b_string, c_string)):
您可能会发现另一个类似的习语很有用:
而不是:
if a_string == "abcdefg" or b_string == "abcdefg" or c_string == "abcdefg":
您可以这样做:
if a_string in "abc":
if any(i == "abcdefg" for i in (a_string, b_string, c_string)):
要添加到上一个,在检查字符串中单个字符的特定情况下,可以执行以下操作:
if a_string in "abc":
if any(i == "abcdefg" for i in (a_string, b_string, c_string)):
您可能会发现另一个类似的习语很有用:
而不是:
if a_string == "abcdefg" or b_string == "abcdefg" or c_string == "abcdefg":
您可以这样做:
if a_string in "abc":
if any(i == "abcdefg" for i in (a_string, b_string, c_string)):
你为什么说元组方式很奇怪?据我粗略计算,它是Python 2.7.4源代码中其他任何一个的3-4倍。而且,在这种情况下,元组将是最快的解决方案。;)出于好奇,为什么元组是最快的解决方案?我一直听说集合(和冻结集合)中的成员资格测试要比列表中快得多,这似乎是有道理的,因为查找时间可能比O(n)快。这仅仅是因为这里涉及的集合/元组非常小吗?@gms7777-是的,就是这样。这将说明,这一切都取决于收藏的规模。在处理小集合时,使用元组或列表要高效得多。然而,一个集合比一个更大的集合快得多。为什么你认为元组的方式很奇怪?据我粗略计算,它是Python 2.7.4源代码中其他任何一个的3-4倍。而且,在这种情况下,元组将是最快的解决方案。;)出于好奇,为什么元组是最快的解决方案?我一直听说集合(和冻结集合)中的成员资格测试要比列表中快得多,这似乎是有道理的,因为查找时间可能比O(n)快。这仅仅是因为这里涉及的集合/元组非常小吗?@gms7777-是的,就是这样。这将说明,这一切都取决于收藏的规模。在处理小集合时,使用元组或列表要高效得多。但是,一个集合比一个大的集合快得多。是的,对不起,我写得很快。我回滚了你的问题,因为你把它改成了另一个,使答案无效,而新的答案没有多大意义:没有字符串可以等于“a”,也可以等于“b”,也可以等于“c”布瑞恩:也许你应该考虑在你的问题上多花点力气?我们也试着把时间和思想放在我们的答案上!哦,谢谢。。是的,对不起,我刚才写得很快,我把你的问题退回去了,因为你把它改成了另一个,使答案无效,而新的答案没有多大意义:没有字符串可以等于“a”,也可以等于“b”,也可以等于“c”布瑞恩:也许你应该考虑在你的问题上多花点力气?我们也试着把时间和思想放在我们的答案上!哦,谢谢。。我应该想清楚的。