Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如果a=this或this或this_Python - Fatal编程技术网

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”布瑞恩:也许你应该考虑在你的问题上多花点力气?我们也试着把时间和思想放在我们的答案上!哦,谢谢。。我应该想清楚的。