制作返回地图的总列表(python)

时间:2013-11-02 17:14:03

标签: python map lambda return

我有lambda函数f:

f = lambda x:["a"+x, x+"a"]

我有清单lst:

lst = ["hello", "world", "!"]

所以我确实在函数和列表上进行了映射以获得更大的列表,但它没有像我想象的那样工作:

print map(f, lst)
>>[ ["ahello", "helloa"], ["aworld", "worlda"], ["a!", "!a"] ]

正如您所看到的,我在列表中有列表,但我希望所有这些字符串都在一个列表中

我该怎么做?

4 个答案:

答案 0 :(得分:2)

使用itertools.chain.from_iterable

>>> import itertools
>>> f = lambda x: ["a"+x, x+"a"]
>>> lst = ["hello", "world", "!"]
>>> list(itertools.chain.from_iterable(map(f, lst)))
['ahello', 'helloa', 'aworld', 'worlda', 'a!', '!a']

替代(列表理解):

>>> [x for xs in map(f, lst) for x in xs]
['ahello', 'helloa', 'aworld', 'worlda', 'a!', '!a']

答案 1 :(得分:1)

f1 = lambda x: "a" + x
f2 = lambda x: x + "a"
l2 = map(f1,lst) + map(f2,lst)
print l2

['ahello','aworld','a!','helloa','worlda','!a']

答案 2 :(得分:0)

尝试:

from itertools import chain

f = lambda x:["a"+x, x+"a"]
lst = ["hello", "world", "!"]

print list(chain.from_iterable(map(f, lst)))

>> ['ahello', 'helloa', 'aworld', 'worlda', 'a!', '!a']

有关文档,请参阅falsetru的回答。

不错的选择是使用展平功能:

from compiler.ast import flatten

f = lambda x:["a"+x, x+"a"]
lst = ["hello", "world", "!"]

print flatten(map(f, lst))

扁平功能的好处:它可以压扁不规则列表:

print flatten([1, [2, [3, [4, 5]]]])
>> [1, 2, 3, 4, 5]

答案 3 :(得分:0)

您可以使用列表理解来展平这些列表。

f = lambda x:["a"+x, x+"a"]
lst = ["hello", "world", "!"]
print [item for items in map(f, lst) for item in items]

<强>输出

['ahello', 'helloa', 'aworld', 'worlda', 'a!', '!a']