我有以下列表:
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)
答案 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))
我还建议你也许可以重新评估设计,使你的代码更灵活。理解和生成器表达是一个良好的开端。