我有一些电子表格表示为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")]
答案 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)
使用any
和all
生成动态生成的谓词列表。
他们每个人都会获取一个可迭代的对象,并返回它们的any
或all
是否为真 - 并且它们懒惰地工作。
所以,例如:
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'