我正在尝试根据列表中的第二个项目“”来过滤列表中的元组。
以下列表
[[( “AA”, “AA”),( “QQ”, “”)],[( “CC”, “”),( “QQ”, “”)],...] < / p>
我想得到
[[( “AA”, “AA”)],[],...]
我已经尝试过这个
[(tup[0] for tup in sub_list if tup[0]!="") for sub_list in list]
但获取
列表[<generator object <genexpr> at ]
有什么想法吗?
感谢!!!
答案 0 :(得分: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')], []]
答案 1 :(得分:0)
如果你得到这个[<generator object <genexpr> at ]
不是错误或什么的。
尝试在循环中打印它,可能是这样的:
for i in list:
print(i)
答案 2 :(得分:0)
使用... filter
功能怎么样?
[filter(lambda x: x[1]!="", sublist) for sublist in list]
编辑:阅读其他答案,我遇到all
,在这种情况下非常整洁:
[filter(all, sublist) for sublist in list]
答案 3 :(得分:0)
您在列表推导中嵌套了生成器理解,您应该只是嵌套列表推导。
L = [[('aa','')],[('aa','bb')]]
[[item for item in sublist if item[1] != ''] for sublist in L ]
>> [[], [('aa', 'bb')]]
答案 4 :(得分:0)
[[tup for tup in sub_list if all(tup) and tup] for sub_list in lst]