2013-06-30 51 views
3

我有元组的列表:从元组提取与列表理解

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'是一个元组。可以通过列表理解来定义“关系”还是需要写出更长的代码?

+0

虽然这可以写成一个列表理解,但我认为这是一个通常的'for'循环或单独的函数(在列表理解中调用)会更容易理解的情况 –

回答

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] 
3

三元表达式需要其他条件,这就是为什么你会得到这个错误。

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