検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
>>
python_coding_challenge

【Python 雑談・雑学 + coding challenge】comprehension は確かに Pythonic ですけど、map 組み込み関数と使い分けることも必要ですね! 投稿一覧へ戻る

Published 2020年8月9日17:27 by mootaro23

SUPPORT UKRAINE

- Your indifference to the act of cruelty can thrive rogue nations like Russia -

さて、まずは次のコードを見て下さい。出力結果はどうなるでしょうか?


import operator


def stick_to_comprehension():
letters = 'abcd'
numbers = range(1, 5)
return ' '.join([operator.mul(letter, number) for letter, number in zip(letters, numbers)])



letters と numbers という 2 つのシーケンスを定義しています。


zip() 組み込み関数を利用して、これらのシーケンスから 1 つのタプルのリストを作成し、


アンパックを利用して 1 つ 1 つのタプルの要素を取り出して、


要素同士を掛け合わせた結果を要素とするリストを作って、


全ての要素を ' ' ( スペース ) をセパレータとして繋ぎ合わせて 1 つの文字列を作成しています。


ということで、


print(stick_to_comprehension())

# a bb ccc dddd



という出力結果になります。


comprehension は、従来の filter() 関数と map() 関数を利用して実現していたことを、簡潔に記述することが可能です。
(この例では if 文が組み込まれていないので、filter 機能は実装していませんが...)


確かに便利です。


ですが、この例のように複数のシーケンスを対象にして何らかの処理を加えた新しいシーケンスを作成する場合は、


実は map() 組み込み関数を利用したほうが簡潔に記述できちゃうんです。


では、map() 関数を利用して同じ結果を取得できるように作り直してみてください。


制限時間 10 分:


import operator


def using_map():
letters = 'abcd'
numbers = range(1, 5)

pass



いかがですか?


map() 関数の定義はこうなっています。


map(function, iterable, ...)



map() 関数は iterable を複数受け取ることが可能で、要素を function に渡す前に zip() を利用して要素を集めたシーケンスを作成します。


ですから、いちいちこちら側で zip() を適用する手間が必要ないんです。


ということで、


import operator


def using_map():
letters = 'abcd'
numbers = range(1, 5)
return ' '.join(map(operator.mul, letters, numbers)))


print(using_map())

# a bb ccc dddd



が正解例になります。
この記事に興味のある方は次の記事にも関心を持っているようです...
- People who read this article may also be interested in following articles ... -
【Python 雑談・雑学 + coding challenge】Python data structure の1つ、set を活用していますか? 複数のシーケンスの包含関係を調べるには最適です
【Python 雑談・雑学 + coding challenge】sorted 組み込み関数の key パラメータをうまく使って、カスタムオブジェクトを簡単にソートしよう! __getitem__、__len__ 特殊関数 ( special methods, dunder methods ) を実装すれば立派なシーケンス ( sequence ) です
【Python 雑談・雑学 + coding challenge】iterator protocol の実装 --- __iter__ 特殊関数は何を返すべき? イテレータオブジェクト ( iterator object ) なら何でも、そう、generator expression でもOKです!
【Python 雑談・雑学】 list comprehension (リスト内包表記) は節度を持って使ってください、という話
【Python 雑談・雑学 + coding challenge】collections モジュールの Counter クラスと most_common メソッドを利用してシーケンス内の最頻出要素を取得しよう!
【Python 雑談・雑学】 デコレータ (decorators) を理解しよう - デコレータ、オリジナル関数からの引数の渡し方、受け取り方
Python coding challenge - 全員助けるには何隻のボートが必要?- pinching window algorithm の利用 🔒