iT邦幫忙

2

[自學Python紀錄] HackerRank 新手30天挑戰-Day07

Hi there! 我是嘟嘟~受到前輩啟發,想說可以紀錄一下自己練習的過程,小女子為程式超超菜鳥,此系列非教學文,僅為個人解題筆記,可能有錯誤或未補充詳盡之處,歡迎前輩們不吝指教!也歡迎正在自學的夥伴一起討論學習~


Day 7: Arrays (陣列)

輸入格式

第一行輸入一整數N代表陣列的數量。
第二行包含N個用空格隔開的整數數字,代表一陣列A。

限制:1 ≦ N ≦ 10001 ≦ A ≦ 10000

輸出格式

反轉陣列A裡的每個元素(in reverse),並以空格隔開後印出。

樣本輸入

4
1 4 3 2

樣本輸出

2 3 4 1

  

原始格式

import math
import os
import random
import re
import sys

if __name__ == '__main__':
    n = int(input())

    arr = list(map(int, input().rstrip().split()))

  

我的解答1

n = int(input())

arr = list(map(int, input().rstrip().split()))
#對每個輸入字串刪除末尾空格,以空格隔開,轉換成整數型態再以列表儲存

for i in arr[::-1]: #將列表arr元素反轉,並歷遍每個元素
    print(i,end = ' ') #印出每個元素,並用空格隔開

  

我的解答2

n = int(input())

arr = list(input().rstrip().split()) #與解答1差別在於列表內的元素(數字)仍為字串型態

print(' '.join(arr[::-1])) #反轉列表arr後,以空格隔開並印出新字串

  
輸入

35833 9919 6731

結果為

6731 9919 5833

  

補充:

  • str.rstrip() 可以删除字符串 末尾 的指定字符(默認為空格);

  • str.split() 可以把字符串以指定字符分隔(默認為空格),返回 列表(list)

  • map(function,seq) 可以將列表(seq)裡的每個元素用函式(function)歷遍計算,並返回一個 迭代器

  • str.join(seq) 可以將列表(seq)中的字符串元素以指定字符串(str)分隔,返回一個新的 字串(string),注意的是若列表裡有非字符串元素(如整數int),必須先轉換成字串str型態才可以進行join(),否則會出現錯誤。
      

錯誤解法:

print(' '.join(str(arr[::-1])))

結果為
[ 2 , 3 , 4 , 1 ]

因為一但str(arr)後,arr的型態已經不是列表了,此時中括號([])和逗號(,)也轉換成字串,join()後會當成字串一起隔開並串接。

如果題目已經給定一個整數元素的列表了,規定要你改成字串後再用join()串連的話,可以用兩種方法:

  1. 使用map()函式
    arr = list(map(str, arr))

  2. 列表生成式
    arr = [str(c) for c in arr]

(感謝前輩補充)
  


尚未有邦友留言

立即登入留言