缩小if语句

时间:2017-05-24 14:10:39

标签: python list operator-keyword

我有以下列表:

languages =["java", "haskell", "Go", "Python"]
animals = ["pigeon", "python", "shark"]
names = ["Johan","Frank", "Sarah"]

我想知道以下所有三个列表中是否存在python。以下if语句就是我刚刚使用" in"方法和"和"运算符。

if("Python" in languages and "Python" in animals and "Python" in names )

有没有办法将此语句缩小为较小的长度?
I.E。

if("Python" in languages and in animals and in names)

6 个答案:

答案 0 :(得分:6)

您可以避免重复"Python"

if all("Python" in L for L in [languages, animals, names]):

但这不会短得多。

答案 1 :(得分:5)

如果这是您希望反复进行的测试,那么预先计算您的列表的交叉点会更有效:

lanimes = set(languages) & set(animals) & set(names)

if "Python" in lanimes:

in运算符对于列表是O(n),对于集合是O(1)。)

答案 2 :(得分:4)

考虑一下:

if all("Python" in x for x in (languages, animals, names)): 

答案 3 :(得分:2)

我认为Python没有特别类似的语法糖,但根据你有多少列表,你可以做类似的事情

if all("Python" in x for x in [languages, animals, names])

就其本身而言,它可能比你的and更冗长,但如果你有大量的列表,或者你已经有了列表列表,那么它应该节省一些空间,恕我直言更清楚的是if语句的目标是什么。

答案 4 :(得分:2)

如果您使用的是Python 3,则可以使用extended iterable unpacking

if 'Python' in (*languages, *animals, *names):

答案 5 :(得分:0)

简答:不,语言语法不允许这样做。

如果确实希望减少重复'Python',您可以在if条件中使用类似的内容:

all('Python' in p for p in (languages, animal, names))

我还建议你也许可以重新评估设计,使你的代码更灵活。理解和生成器表达是一个良好的开端。