0

私はラムダ関数fを持っています:

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

そして私はリストlstを持っています:

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

そのため、関数とリストをマップしてより大きなリストを取得しましたが、思ったように機能しませんでした:

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

ご覧のとおり、リスト内にリストを取得しましたが、これらの文字列をすべて1 つのリストにまとめたかったのです。

どうやってやるの?

4

4 に答える 4

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']
于 2013-11-02T17:18:19.923 に答える
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 からの回答を参照してください。

良い代替手段は flatten 関数を使用することです:

from compiler.ast import flatten

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

print flatten(map(f, lst))

flatten 関数の利点: 不規則なリストを平坦化できます:

print flatten([1, [2, [3, [4, 5]]]])
>> [1, 2, 3, 4, 5]
于 2013-11-02T17:18:36.233 に答える