Even the last (Library 2.0) - リストのスライス
どんな問題?
Even the last
http://www.checkio.org/mission/even-last/
数字のリストから、偶数番目(index=0,2,4...)の要素を取り出して合計値を求める。
その合計値とリストの最後の要素と掛け合わせよ。
偶数番目というのがまぎらわしいが、最初の要素はindex=0だから偶数番目として扱う。
リストが空([ ])なら0を返す。
どうやって解く?
偶数番目を取り出すには、スライスを使って array[::2] とする。
最後の要素は、array[-1]となる。
この2つを掛ければいい。
IndexErrorに注意
arrayが[ ]のとき、array[-1]ではIndexErrorが発生する。array[::2] や sum([]) はエラーにはならない。
>>> a = [] >>> a[::2] [] >>> sum([]) 0 >>> a[-1] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range
リストが空かどうかの判定
PEP 8 や Google Python スタイルガイドによれば、リストが空かどうかの判定は、
if array == []: pass # arrayが空のとき if len(array) == 0: pass # arrayが空のとき
と書くよりも
if not array: pass # arrayが空のとき if array: pass # arrayが空でないとき
と書く方が好ましいらしい。個人的には、array == [] の方がわかりやすいと思うんだけど。
コードはこちら
def checkio(array): return sum(array[::2]) * array[-1] if array else 0
ラムダ式で書いてみたり。
checkio = lambda array: sum(array[::2]) * array[-1] if array else 0
他の人の答え
http://www.checkio.org/mission/even-last/publications/shisashi/python-3/first/
checkio = lambda array: sum(array[::2]) * sum(array[-1:])
array[-1:] とすることで、arrayが[]のときにIndexErrorを発生させないテクニック。
これは思いつかなかった。