我有lambda函数f:
f = lambda x:["a"+x, x+"a"]
我有清单lst:
lst = ["hello", "world", "!"]
所以我确实在函数和列表上进行了映射以获得更大的列表,但它没有像我想象的那样工作:
print map(f, lst)
>>[ ["ahello", "helloa"], ["aworld", "worlda"], ["a!", "!a"] ]
正如您所看到的,我在列表中有列表,但我希望所有这些字符串都在一个列表中
我该怎么做?
答案 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']