2013-11-20 35 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版本您使用的