PROGRAMMERS leve 1ボリュームの追加


🔗 ソース


プログラマレベル1:ボリュームの追加

📄 質問する



📝 マイコード(修正前)

def solution(absolutes, signs):
    answer = 0
    for i in range(len(absolutes)):
        if signs[i]:
            answer += absolutes[i]
        else:
            answer -= absolutes[i]
    return answer

悩む


for文では、リスト内の各要素に配列の長さとインデックスを使用しない方法はありますか?
for sign in signs:
または
for absolute in absolutes:
使用できますが、これでは要素の1つしかアクセスできません.

🛠 解決策


少し前に授業で習ったzip関数を思い出しました.
zip()関数は、複数のループ可能オブジェクトをパラメータとして受信し、各オブジェクトに含まれる要素にtupleの形式で順次アクセスできる反復器(iterator)を返します.
 numbers = [1,2,3]
 letters = ["a","b","c"]
 for pair in zip(numbers, letters):
 	print(pair)
    
#(1, 'a')
#(2, 'b')
#(3, 'c')
リストの前に「解凍」(Unpacking)演算子を付けてzip()関数に渡すと、解凍(すなわち、分解)されます.この過程により,元の2つのtupleを再獲得することができる.
numbers, letters = zip(*pairs)
print(numbers) #(1,2,3)
print(letters) #('a','b','c')

📝 マイコード(修正後未完了)

def solution(absolutes, signs):
    answer = 0
    for absolute, sign in zip(absolutes, signs):
        if signs:
            answer += absolute
        else:
            answer -= absolute
    return answer

💡 マイコード(最終)


考えてみればif-elseドアを一列に整理すれば、儀式はもっときれいになるはずだ.
def solution(absolutes, signs):
    answer = 0
    for absolute, sign in zip(absolutes, signs):
        answer += absolute if sign else -absolute
    return answer

悟る


if-else文が表示された場合は、1行でクリーンアップできるかどうかを考慮します:)