将此过滤器语句转换为列表推导

时间:2014-03-15 18:33:56

标签: python python-3.x

我有这个过滤声明:

s = [['hello', 'there', 'friend', '.'], ['i', 'am', 'max', ',doe', '"']]
t = [filter(lambda x: len(x) > 2, string) for string in s]

这会产生我想要的结果,除了我需要t作为列表而不是过滤器对象列表。如何将其转换为列表理解?

感谢。

2 个答案:

答案 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']]
>>>