2013-11-20 38 views
0

我想根据列表中的第二项“”来过滤列表中的元组。在列表中列表中过滤元组

为以下列表

[[( “AA”, “AA”),( “QQ”, “”)],[( “CC”, “”),( “QQ”,” “)],...]

我想获得

[[(” AA”, “AA”)],[],...]

我已经尝试过这

[(tup[0] for tup in sub_list if tup[0]!="") for sub_list in list] 

但是得到一个列表

[<generator object <genexpr> at ] 

任何想法?

谢谢!

+0

? – jazzpi

回答

2

括号(x for x in ...)导致发电机表达,而方括号[x for x in ...]是一个列表理解那就是一个名单。

此外,当您与''空字符串最后一个元组元素进行比较时,这是tup[1]

>>> [[tup for tup in sub_list if tup[1] != ""] for sub_list in lst] 
[[('AA', 'AA')], []] 
+0

这并没有' t回答这个问题(这个输出与描述的结果是不一样的) – mguijarr

+0

我现在投了票,它是正确的。 – mguijarr

0

如果你得到这个[<generator object <genexpr> at ]是不是一个错误什么的。

尝试打印在一个循环中,也许是这样的:关于使用... filter功能

for i in list: 
    print(i) 
+0

其真正的......在循环结束后,再次从第一个循环中得到的结果我得到元组上的第一项,但过滤器不起作用,我没有得到完整的元组... – user2950162

0

什么?

[filter(lambda x: x[1]!="", sublist) for sublist in list] 

编辑:阅读其他的答案,我遇到了all,这是在这种情况下,相当整洁:

[filter(all, sublist) for sublist in list] 
0

您将一个生成器理解嵌套在列表理解中,您应该嵌套列表理解。

L = [[('aa','')],[('aa','bb')]] 
[[item for item in sublist if item[1] != ''] for sublist in L ] 
>> [[], [('aa', 'bb')]] 
0
[[tup for tup in sub_list if all(tup) and tup] for sub_list in lst] 
什么Python版本您使用的