web-dev-qa-db-ja.com

リストの各要素に関数を適用します

変数入力のリストに関数を適用するにはどうすればよいですか?たとえばfilter関数は真の値を返しますが、関数の実際の出力は返しません。

from string import upper
mylis=['this is test', 'another test']

filter(upper, mylis)
['this is test', 'another test']

予想される出力は次のとおりです。

['THIS IS TEST', 'ANOTHER TEST']

upperが組み込まれていることは知っています。これは単なる例です。

36
shantanuo

map の代わりに filter を使用するつもりだと思います:

>>> from string import upper
>>> mylis=['this is test', 'another test']
>>> map(upper, mylis)
['THIS IS TEST', 'ANOTHER TEST']

さらに簡単に、stringからインポートする代わりにstr.upperを使用できます(@alecxeのおかげです)。

>>> map(str.upper, mylis)
['THIS IS TEST', 'ANOTHER TEST']

Python 2.xでは、mapは、リスト内のすべての要素に特定の関数を適用することにより、新しいリストを作成します。 filterは、指定された関数でTrueに評価される要素に制限することにより、新しいリストを作成します。

Python 3.xでは、mapおよびfilterがリストの代わりにイテレーターを構成します。したがって、Python 3.xを使用してリストを必要とする場合は、リスト内包アプローチが適しています。

51
mdml

または、代わりに、 list comprehension アプローチを使用できます。

>>> mylis = ['this is test', 'another test']
>>> [item.upper() for item in mylis]
['THIS IS TEST', 'ANOTHER TEST']
43
alecxe