0

所以我正在寻找一种速记方法:

if a == 5 or a == 6 or a == 7: 

让它变成这样:

if a == (5 or 6 or 7): 

现在,我知道我可以这样做:

if a in [5,6,7]:

但我正在寻找更通用的东西,当元素不能轻易放入列表时(例如,如果它们是长变量名或者每个元素本身就是一个列表)

我也知道这个any()功能,但这并不能很好地清理它(我仍然必须==为每个条件都有一个)。

可以这样做吗?正确的语法是什么?

编辑:我知道这可以简单地用一堆方法来完成,但我特别询问如何将比较链接在一起,如第二个片段所示

4

3 回答 3

2

x in <list>正如您所描述的,通常推荐的语法是。

if a in [5,6,7]:

您声称不合适的情况同样适用:

# Long names
if a in [the_first_of_november,
         the_second_sunday_in_the_third_lunar_month,
         tuesday]: 


# Lists:
if myList in [yourList, hisList, herList]:

在我看来,最清晰的使用in涉及预先计算右手列表:

if my_answer in list_of_correct_answers:

如果您能够在其他地方构建列表,那么对于您提到的每种情况,这都是完全可读的。

于 2013-10-30T14:05:54.733 回答
1

通常,您始终可以in为此使用运算符。如果您想在嵌套列表中查找某些内容,您可以随时使用itertools.chain.from_iterable. 老实说,现在我想不出我们不能使用列表的情况。

例如:

>>> my_list = [[1,2,3],[4,5,6], 6, 7, 2, 3, 'abc']
>>> n = 5
>>> n in itertools.chain.from_iterable(my_list)
True
>>> 
>>> s = 'a' #You can even find if a char exists in the list
>>> s in itertools.chain.from_iterable(my_list)
True

你的问题的答案,在第二个片段中做类似的事情?不。

于 2013-10-30T14:09:46.367 回答
0

pythonic的方式是

if a in (5, 6, 7):
if a in [5, 6, 7]:

第一个也是正确的:

if a == 5 or a == 6 or a == 7:

第二个语句没有做你认为它做的事情:

bool(6 == (5 or 6 or 7))
Out[1]: False
于 2013-10-30T14:06:45.730 回答