📑
【Python】コーディング練習
はじめに
コーディング練習1日目です。
コーディング内容
リスト内の数字の中で、値の大きなもの2つの差をリストに追加していき、使用した値の大きなもの2つはリストから除外する。
この処理を繰り返していき、最後にリストに残った値を出力する。
実装
sample.py
# 関数内で型明示する
from typing import List
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
def remove_largest():
# リストの最大値が入っているインデックス番号を取り出す。
index_of_largest = stones.index(max(stones))
# 一番重い石が取り除かれるように、順番を入れ替える。
stones[index_of_largest], stones[-1] = stones[-1], stones[index_of_largest]
# 引数を指定しない場合、リストの最後の値が取り除かれる。
return stones.pop()
while len(stones) > 1:
stone1 = remove_largest()
stone2 = remove_largest()
# もし上位2つの重さの石の差が異なるなら、
if stone1 != stone2:
# その差をリストに加える。
stones.append(stone1 - stone2)
# リストに残った最後の要素を返す
return stones[0] if stones else 0
# テスト
if __name__ == "__main__":
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
print(Solution().lastStoneWeight(list1))
ポイント
# リストの用意
stones = [1,2,3,4,5,6,7,8,9,12,10]
# 対象の数字が入っているインデックス番号を返す。
stones.index(12)
# 出力:9
# インデックス番号を指定しなければ、最後の要素が取り除かれる。
stones.pop()
# 出力:10
# もしリスト(stones)があるなら1を、それ以外の場合は0を返す。(結果、条件式の書き方)
stones[0] if stones else 0
参考
Discussion