我有这个过滤声明:
s = [['hello', 'there', 'friend', '.'], ['i', 'am', 'max', ',doe', '"']]
t = [filter(lambda x: len(x) > 2, string) for string in s]
这会产生我想要的结果,除了我需要t
作为列表而不是过滤器对象列表。如何将其转换为列表理解?
感谢。
答案 0 :(得分:3)
如果您不想使用filter()
,可以尝试以下操作:
m = [[e for e in l if len(e) > 2] for l in s]
print m
<强>输出:强>
[['hello', 'there', 'friend'], ['max', ',doe']]
修改强>
请记住,上面的代码相当于:
result = []
for l in s:
sub_result = []
for e in l:
if len(e) > 2:
sub_result.append(e)
result.append(sub_result)
print result
答案 1 :(得分:2)
过滤解决方案:
t = [list(filter(lambda x: len(x) > 2, string)) for string in s]
filter
个对象仅存在于Python 3中,因此您需要使用内置的list
函数将其转换为list()
类型。 E.g:
>>> t = [list(filter(lambda x: len(x) > 2, string)) for string in s]
>>> t
[['hello', 'there', 'friend'], ['max', ',doe']]
>>>
列表理解解决方案:
>>> t = [[x for x in string if len(x) > 2] for string in s]
>>> t
[['hello', 'there', 'friend'], ['max', ',doe']]
>>>