使用列表理解从元组中提取

时间:2013-06-30 22:07:24

标签: python list-comprehension

我有一个元组列表:

tuples = [(0,1), (2,0), (3,4), (1,2) etc. ]

我想创建另一个列表,其中包含与0配对的所有数字。我尝试使用列表解析来执行此操作:

relations = [x[1] if x[0] == 0 else x[0] if x[1] == 0 for x in tuples]

但是,这会产生错误。 Python似乎不喜欢'x'是一个元组。可以用列表理解来定义“关系”,还是需要写出更长的代码?

2 个答案:

答案 0 :(得分:6)

您还需要一个else;每个条件表达式需要 ifelse,而忽略第二个条件表达式中的else

但你的问题可以简单地表达为:

relations = [x[0] or x[1] for x in tuples if 0 in x]

这首先过滤任何一个零的元组,然后选择不为0的值。

演示:

>>> tuples = [(0,1), (2,0), (3,4), (1,2)]
>>> [x[0] or x[1] for x in tuples if 0 in x]
[1, 2]

答案 1 :(得分:3)

三元表达式需要一个else条件,这就是你得到错误的原因。

>>> [x[0] if x[1] ==0 else x[1] for  x in  tuples if 0 in x]
[1, 2]