在Python中测试if语句列表的优雅方法

时间:2015-05-18 21:50:47

标签: python if-statement logic

我有一些电子表格表示为python中的列表列表,我从那些生成输出。

然而,当我不得不省略表单的部分时,我最终会得到一些非常难看的代码,例如:while ...等等。

是否可以将所有条件表示为元组列表,比如说@new_word = Word.new @new_word.german = string @new_word.save ,然后有一个if语句检查两个语句都是假的?

如果我有这两个清单:

if not "string" in currentline[index] and not "string2" in currentline[index] and not

我只想要第一个打印,我需要一个if语句以某种方式测试omit = [(0, "foo"), (5,"bar)]内的每个条件,如:

list = [["bar","baz","foo","bar"],["foo","bar","baz","foo","bar"]]
omit = [(0,"foo"),(4,"bar")]

2 个答案:

答案 0 :(得分:4)

您可以使用any和生成器表达式:

>>> seq = [["bar","baz","foo","bar"],["foo","bar","baz","foo","bar"]]
>>> omit = [(0,"foo"),(4,"bar")]
>>> for x in seq:
...     if not any(i < len(x) and x[i] == v for i,v in omit):
...         print(x)
...         
['bar', 'baz', 'foo', 'bar']

i < len(x)是必要的,这样我们就不会尝试访问没有列表中的元素#4。

此版本要求不满足omit条件;如果您只想在满足两个条件时省略子列表,请将any替换为all

答案 1 :(得分:-1)

使用anyall生成动态生成的谓词列表。

他们每个人都会获取一个可迭代的对象,并返回它们的anyall是否为真 - 并且它们懒惰地工作。

所以,例如:

any([False, False, False]) is False
all([True, True, True]) is True
any([False, False, True]) is True

当你将它们与发电机一起使用时,美丽的部分就会出现。

any(i % 2 == 0 for i in range(50)) is True

在这里,您可以将这些运算符与您的数据结构一起使用。

for row in rows:
    if any(row[idx] == omittable for idx, omittable in omit):
        print 'naw uh'