表参道ヒルズから原宿までの若者の街を散策(コロナ前2019年7月の写真スライド)

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

若者の街、表参道ヒルズから原宿までの散策を動画にしました。
写真に合う素敵な楽曲をBGMにしたので、かなりの自信作です!!

※ 音量注意 ※

●YouTube

この電球が、インパクトあります。

こういうおしゃれな感じ、若者のセンスに刺激されました。

このデザインも画期的な感じがします。

こういう落書きっぽいのもアートな感じで新鮮です。

今日も見て下さって、ありがとうございました (=^x^=)

写真の投稿を始めました。
(写真AC)のプロフィールページです。

TikTok始めました。
始めた理由は、TikTokの仕組みに興味を持ったからです。若い方限定のSNSなので、自分には無理だと思っていたのですが、他のSNSが時間に影響を受ける仕組みに対してTikTokは時間に影響を受けないループ型なので、良い動画であれば過去の動画も見て頂けるという仕組みに興味を持って始めました。TikTokは、Twitterが使える方なら多分すぐ慣れると思いますし、動画編集に至っては、YouTubeの100倍以上楽です。

インスタ再開しました。

写真のアンケートを実施しております。
宜しかったらご回答頂けますと、大変励みになります(=^x^=)

■ 関連記事 ■

自己紹介


息抜きに、写真で癒し(=^x^=)に戻る

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ

羽田空港第一ターミナル飛行機と空港夜景(コロナ前2019年7月の写真スライド)

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

羽田空港第一ターミナルで、飛行機と空港夜景の撮影をしてきました。

※ 音量注意 ※

●YouTube

● TikTok

空港ならではの、珍しい写真も。

ミッキーマウスの飛行機

飛行機の模型

こういうの、マニアにはたまらないですね。
飛行機のダイアです。こういうの見ているだけで興奮してきます。

空港って、本当に興奮する場所ですね。

コロナ前に行っておいて良かったです。

第7派到来しているので、過去の写真を整理しながら大人しく家で編集作業しています。

今日も見て下さって、ありがとうございました (=^x^=)

写真の投稿を始めました。
(写真AC)のプロフィールページです。

TikTok始めました。
始めた理由は、TikTokの仕組みに興味を持ったからです。若い方限定のSNSなので、自分には無理だと思っていたのですが、他のSNSが時間に影響を受ける仕組みに対してTikTokは時間に影響を受けないループ型なので、良い動画であれば過去の動画も見て頂けるという仕組みに興味を持って始めました。TikTokは、Twitterが使える方なら多分すぐ慣れると思いますし、動画編集に至っては、YouTubeの100倍以上楽です。

インスタ再開しました。

写真のアンケートを実施しております。
宜しかったらご回答頂けますと、大変励みになります(=^x^=)

■ 関連記事 ■

自己紹介


息抜きに、写真で癒し(=^x^=)に戻る

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ

等々力渓谷 東急大井線世田谷区の自然(2019年7月コロナ前の写真スライド)

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

等々力渓谷は、東京都世田谷区にあるのですが、とても東京23区内とは思えないほどの静けさと水辺の涼しさと自然が味わえました。

※ 音量注意 ※

●YouTube

● TikTok

動画の中から写真を紹介します。

渓谷の石碑。

小道を歩いていくと

涼しげな滝に、

木々に囲まれ、自然を満喫出来ました。

駅に到着して、気になるポスターを発見!!

人をぶっちゃダメなんだよ。暴力は犯罪です。

このポスターも動画に入れました。

今日も見て下さって、ありがとうございました (=^x^=)

写真の投稿を始めました。
(写真AC)のプロフィールページです。

TikTok始めました。
始めた理由は、TikTokの仕組みに興味を持ったからです。若い方限定のSNSなので、自分には無理だと思っていたのですが、他のSNSが時間に影響を受ける仕組みに対してTikTokは時間に影響を受けないループ型なので、良い動画であれば過去の動画も見て頂けるという仕組みに興味を持って始めました。TikTokは、Twitterが使える方なら多分すぐ慣れると思いますし、動画編集に至っては、YouTubeの100倍以上楽です。

インスタ再開しました。

写真のアンケートを実施しております。
宜しかったらご回答頂けますと、大変励みになります(=^x^=)

■ 関連記事 ■

自己紹介


息抜きに、写真で癒し(=^x^=)に戻る

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ

湘南片瀬海岸 江の島の写真(2017年コロナ前)

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。


コロナ前の2017に、JR小田急線を乗り継いで、片瀬江ノ島に行った時の写真を整理して動画にしました。

※ 音量注意 ※

●YouTube

● TikTok

駅から徒歩10分で片瀬海岸へ。

そこから船で江ノ島の岩場へ行きました。

ダイナミックな波が味わえました。

ただ、足元が危ないので、撮影される方はお気を付けて。

片瀬海岸

江ノ島岩場

今日も見て下さって、ありがとうございました (=^x^=)

写真の投稿を始めました。
(写真AC)のプロフィールページです。

TikTok始めました。
始めた理由は、TikTokの仕組みに興味を持ったからです。若い方限定のSNSなので、自分には無理だと思っていたのですが、他のSNSが時間に影響を受ける仕組みに対してTikTokは時間に影響を受けないループ型なので、良い動画であれば過去の動画も見て頂けるという仕組みに興味を持って始めました。TikTokは、Twitterが使える方なら多分すぐ慣れると思いますし、動画編集に至っては、YouTubeの100倍以上楽です。

インスタ再開しました。

写真のアンケートを実施しております。
宜しかったらご回答頂けますと、大変励みになります(=^x^=)

■ 関連記事 ■

自己紹介


息抜きに、写真で癒し(=^x^=)に戻る

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ

立川市のひまわり(国営昭和記念公園)

ご覧頂きまして、誠にありがとうございます。
写真スライドショーが作れる動画編集ソフトを使って、YouTubeTikTokThreadsにUPしてます。

青梅線に乗って、立川市の西立川駅にある、昭和記念公園でひまわりの中でも、サンフィニティという品種の花を撮影しました。

※ 音量注意 ※

●YouTube

● TikTok

秋葉原方面から出かけたので、移動距離はかなりあり、新宿を越え、中央線で立川まで行き、青梅線に乗り換えて西立川で下車しました。

動画の中から写真を抜粋します。

西立川駅の空。多摩の空も綺麗だなぁ。

園内に入り、

もみじ橋を渡って少しで到着!

小ぶりながら強くしなやかに、優しく咲いているひまわりに癒された日帰り旅行でした。

この日の歩数計です。

良い気分転換になりました。

今日も見て下さって、ありがとうございました (=^x^=)

写真の投稿を始めました。
(写真AC)のプロフィールページです。

TikTok始めました。
始めた理由は、TikTokの仕組みに興味を持ったからです。若い方限定のSNSなので、自分には無理だと思っていたのですが、他のSNSが時間に影響を受ける仕組みに対してTikTokは時間に影響を受けないループ型なので、良い動画であれば過去の動画も見て頂けるという仕組みに興味を持って始めました。TikTokは、Twitterが使える方なら多分すぐ慣れると思いますし、動画編集に至っては、YouTubeの100倍以上楽です。

インスタ再開しました。

写真のアンケートを実施しております。
宜しかったらご回答頂けますと、大変励みになります(=^x^=)

■ 関連記事 ■

自己紹介


息抜きに、写真で癒し(=^x^=)に戻る

初めてのPhotoshop

写真素材素材【写真AC】

写真ACプロフィールページ

プログラミングの疲れ目対策と視力維持に向けて

この記事では、プログラミングで長時間PCと睨めっこして目が疲れてしまった方向けの疲れ目対策と、これ以上視力が下がらないようにするための方法をまとめました。
目のストレッチと疲れ目に効く手のツボを紹介します。

トップページに戻る
はじめてのWeb制作(HTML/CSSドットインストール無料レッスンノート)
プログラミング学習で関わってはいけない人達と逃げるべき環境
プログラミングと資格について
自己紹介ページ

こちらのサイトから、私がよく行っている目のストレッチを引用してまとめました。
マイケアさんのサイトです。

ギュッぱ体操 〜目の渇きや視力低下防止に〜
・目をギュッと閉じてパッと開ける
・頭を動かさないように、黒目を右→左→上→下→に動かす 4〜5回繰り返す。
・30分に一度ぐらいやる

パチパチ体操 〜PC、スマホによる疲れ目に効果的〜
・1分ほど目を開いたり閉じたりする。
・終わったらまぶたを閉じてしばらく休ませる。
・一日に数回行うと良い

ピント合わせ体操 〜 目の機能をリフレッシュ 〜
・近くのものを10秒から20秒見つめる
・視線をなるべく遠くに移し、5分ほど眺める
・1日に4回から5回ほど

次にこちらのサイトのトレーニングを紹介します。先進会眼科さんのサイトです。
自宅で視力回復?眼のためにできるトレーニング5つのやり方|注意点も解説

眼球ぐるぐる
・目の動きをなめらかにして、ものを見やすくするのに役立つ。
・一点ばかり集中していると、目の筋肉が固くなり、運動不足になる。目の末梢神経が悪くなり、酸素や栄養が行かなくなるので優しくほぐす運動。

やり方:
・両方の目をゆっくり大きく回転させる。
・1周10秒ぐらいかける。右回り2〜3周、左回り2〜3周、寄り目にして5秒キープ。

最後に手のツボです。
Medicalook(メディカルック)さんのサイトです。
眼精疲労「手のツボ」を3つご紹介!疲れ目・かすみ目を解消したい方へ

こちらのサイトでは、

・親指と人差し指の間
・親指
・小指

のツボを紹介しています。
手のツボなのでメガネをしたままでも押せますね。
また、目の周りや眉毛にも疲れ目に効くツボが集中しているので、
もっとじっくり目の疲れを取りたい方はメガネを外して目の周りや眉毛の辺りをゆっくり押して、目を労ってください。

追加で、目の周りのツボの紹介です。赤岩治療院さんの図解が分かりやすかったので、ここで紹介します。

トップページに戻る
はじめてのWeb制作(HTML/CSSドットインストール無料レッスンノート)
プログラミング学習で関わってはいけない人達と逃げるべき環境
プログラミングと資格について
自己紹介ページ

プログラミングのアンケートにご協力頂ける方はこちらのフォームで勉強法など色々と教えて下さい。

paiza レベルアップ問題集 標準入力その7「STEP: 3 1 行目で与えられる N 個の文字列の入力」をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、Pythonで標準入力とsplitなどのメソッドを用いて、5つの単語の数(数値)と、全ての単語(文字列)をリスト(配列)として取得して、単語のみをループ内で出力することが可能になります。

GASではスプレッドシートで値を取得して、二次元配列にして出力しています。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、ご安心なさって下さい。)


1 行目で与えられる N 個の文字列の入力 (paizaランク D 相当)

問題:
1 行目で、整数 N と、続けて N 個の文字列 s_1, … , s_N が半角スペース区切りで与えられます。
s_1, … , s_N を改行区切りで出力してください。

入力例1
5 paiza 813 paiza813 Hello World!


出力例1
paiza
813
paiza813
Hello
World!

今回は入出力例1を用います。

ではまず、Pythonで解いて行きます。


手順として、

1: 1行目の単語の個数5と、5つの単語を標準入力でリスト(配列)arrayに取得する

2: 単語の個数5個の5を変数Nに、N=int(array[0])と数値形式で代入する


3: リストarrayに対し、delメソッドでNに代入した5を消去する

4: リストに残った単語をループで出力する

・基本的なループ
・リスト出力に適したループ
・上記の内包表記

の4ステップで行います。

まず、準備として、paiza.ioにこのように入力します。
(入力例1 をコピペしたのみ)

次にこの1行をリスト(配列)として下記のメソッドなどを用いて取得します。

区切り文字は半角スペースで、リストarrayに標準入力を用いて取得します。
複数のメソッドなどが登場しているので、この例に沿って役割をまとめます。

input … 標準入力で文字や数値を取得する

split … 半角スペースなどの指定の区切り文字で分割して取得する

str … 上記で取得する対象が単語(文字列)である


map … まとめて適用


list … リスト(配列)変換

下記のコードで標準入力と入力とリストarrayの出力を行います。

#1行目の単語の個数5個と単語を標準入力でリストarrayに取得する
array=list(map(str,input().split(' ')))

#リストとして取得できたことを確認する
print(array)

単語の個数5個も含めて、無事にarrayに標準入力で取得出来たことが確認出来ました。


単語の個数である「5」は出力しないので、変数「N」に整数として代入します。

N=int(array[0])

下記のコードと出力結果です。

array=list(map(str,input().split(' ')))
print(array)

#変数Nにリストの先頭から単語の個数5を代入する
N=int(array[0])

#Nに5が代入されたことを確認する
print(N)

次に、Nに代入済みのリストarrayの先頭array[0]の5を削除します。

del array[0]

コードと実行結果です。

array=list(map(str,input().split(' ')))
print(array)


N=int(array[0])
print(N)

#リストarrayから変数Nに代入した5を削除する
del array[0]

#削除されたことを確認する
print(array)

元のリストから無事に先頭の5だけが削除されたことが確認出来ました。


それでは、残ったリストarrayを最も基本的なループを用いて縦に出力致します。

現在、リストarrayには、

array[0]=paiza
array[1]=813
array[2]=paiza813
array[3]=Hello
array[4]=world!

の5つの単語が入っています。

ループの書式は下記の様になります。

for i in range(N):

現在Nには5が入っています。

ループで出力する時に、iの値はrange(N)で5未満の、i=0,1,2,3,4の5つの値が代入され、ループを5回分回しながら単語の出力をします。

array=list(map(str,input().split(' ')))
#print(array) ←コメントアウト

N=int(array[0])
#print(N) ←コメントアウト

del array[0]
#print(array)  ←コメントアウト

#最も基本的なループ
for i in range(N):
    print(array[i])

確認用に出力した所はコメントアウトして、基本的なループのみを出力します。

無事出力出来ました。

次項からは、リストに適したループの便利な記述を掲載します。
その前に、一旦コメントアウトしたコードを削除してスッキリとしたコードに致します。

array=list(map(str,input().split(' ')))
N=int(array[0])
del array[0]


#最も基本的なループ
for i in range(N):
    print(array[i])

リストを出力する際に、更に便利なループの表記方法について掲載致します。

for リストの要素の文字 in リスト名:

今回の例ですと、

for word in array:

等になります。

リストの要素の所は自分や他の方が見て分かりやすい「word」などにすると、「単語を取り出すんだな」と伝わりやすいです。

array=list(map(str,input().split(' ')))
N=int(array[0])
del array[0]


#arrayをリストに適したループで出力する
for word in array:
    print(word)

基本的なループと同じ出力結果を得られました。


更にコード短くするには、ループをたった1行で表記する内包表記を用います。

[出力結果のprint文 for リストの要素の文字 in リスト名]

今回の例ですと、

[print(word) for word in array]

と表記致します。

array=list(map(str,input().split(' ')))
N=int(array[0])
del array[0]


#リストarrayを内包表記で出力する
[print(word) for word in array]

Pythonは以上です。
次は、GASで解いて行きます。


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

5つの単語の出力用の黄色いセルは、右揃えにしてあります。

paiza側でコピーをして、スプレッドシートのセル緑のセルA2の所で貼り付ける際に、[Ctrl] + [Shif] + [V] で貼り付けると、書式を崩さずに綺麗に貼り付けられます。

緑色のセルA2(2,1)には、単語の個数5個と、N個の単語がを入力されています。

この緑色のセルを配列arrayに取得をして、N=array[0]と代入した後に、先頭の5を配列arrayから削除します。

残ったarrayをC2から始まる黄色いセル5行分に出力します。

※スプレッドシートに出力する場合は、二次元配列としての配列に追加をして作成します※

空の配列array2を宣言して、ループを用いてループの中でpushメソッドを使用して、arrayの要素を二次元配列になるようにarray2に追加します。
その二次元配列になったarray2をスプレッドシートに出力します。

手順をまとめますと、この様になります。

1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

2: 緑色のセルA2(2,1)をsplitメソッドを用いて配列arrayに取得する


3: 配列arrayをログ出力する


4: 単語の数5を変数Nに、N=array[0]と代入する


5: shiftメソッドでNに代入した最初の単語の数の5を削除する


6: 空の配列array2を宣言して、一次元配列arrayをループの中でpushを使ってarray2に二次元配列として追加する

7: スプレッドシートに出力する前に、二次元配列になっていることを配列array2をログ出力する


8:スプレッドシートのセルC2(2,3)から始まる黄色いセル5行分に出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

このコードを関数「standardInput3」の中に書いて行きます。

Standard Inputで標準入力の意味です。

function standardInput3() {
  
  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}


手順2:緑色のセルA2(2,1)をsplitメソッドを用いてarrayに取得する

const array=ss.getRange(2,1).getValue().split(‘ ‘);

ここで、半角スペースで区切られている単語を配列arrayに取得するのにsplit(‘ ‘)を用いいています。

function standardInput3() {
  
  const ss=SpreadsheetApp.getActiveSheet();

  //緑色のセルA2(2,1)をsplitメソッドで半角スペース区切りにして配列arrayに取得する
  const array=ss.getRange(2,1).getValue().split(' ');

}


手順3:配列arrayをログ出力

console.log(array);

配列に取得出来たことを確認します。

function standardInput3() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');

  //配列arrayに半角スペース区切りで格納出来たことをログ出力で確認する
  console.log(array);

}

出力結果です。

無事にarrayに単語の個数と単語自体を格納出来ました。


手順4:文字列の数NをN=array[0]と代入する

const N=array[0];

出力に使わない単語の文字数の5は、定数Nに代入します。
コードと実行結果です。

function standardInput3() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  //単語数5を定数Nに代入する
  const N=array[0];

  //Nに代入出来たことを確認する
  console.log(N);

}

配列の先頭array[0]がNに無事に代入されました。


手順5: shiftメソッドでNに代入した最初の単語の数の5を削除する

array.shift();

出力するのは単語のみですので、配列arrayから先頭のarray[0]の5を削除します。
現在配列arrayは、

array[0]=5
array[1]=paiza
array[2]=813
array[3]=paiza813
array[4]=Hello
array[5]=World!

の0から5までの6つの要素が入っています。
これを下記のコードでarray[0]のみを削除するのに便利なのがshiftメソッドです。

function standardInput3() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  const N=array[0];
  console.log(N);

  //shiftメソッドで配列arrayの先頭の単語数の5を削除する
  array.shift();

  //削除後の配列arrayを表示する
  console.log(array);

}

実行後のログ出力です。

配列arrayから先頭の5が削除され、出力する単語のみが残りました。


手順6:空の配列array2を宣言して、一次元配列arrayをループの中でpushを使ってarray2に二次元配列として追加する

for(let i=0 ; i<N ; i++)

定数Nには5が代入されていて、現在配列arrayは、

array[0]=paiza
array[1]=813
array[2]=paiza813
array[3]=Hello
array[4]=World!

の5つの単語が格納されています。
ここで、ループの中の変数iをletで配列の添字として宣言して、i=0,1,2,3,4と5回分ループを回します。

i<Nと不等号のみで等号がついていないのは、一番後ろの要素がarray[4]=World!で、5未満の添字になるためです。

空の配列array2を宣言し、下記の書式で二次元配列として追加します。

array2.push([array[i]]);

pushメソッドを使って、配列array2にarrayの要素を追加します。
[array[i]]と[ ] で括っているのは、二次元配列として追加する為です。

function standardInput3() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  const N=array[0];
  console.log(N);

  array.shift();
  console.log(array);

  //空の配列array2を宣言
  const array2=[];

  //ループで二次元配列としてarray2にarrayの要素を追加する
  for(let i=0;i<N;i++){
    array2.push([array[i]]);
  }
}

手順7:スプレッドシートに出力する前に、二次元配列になっていることを配列array2をログ出力する

console.log(array2);

下記のコードで二次元配列になっていることが確認出来ます。

function standardInput3() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  const N=array[0];
  console.log(N);

  array.shift();
  console.log(array);

  const array2=[];
  for(let i=0;i<N;i++){
    array2.push([array[i]]);
  }

  //スプレッドシート出力前にarray2が二次元配列になっていることを確認する
  console.log(array2);

}

これで、スプレッドシートに格納出来る形に整いました。


手順8:スプレッドシートのセルC2(2,3)から始まる黄色いセル5行分に出力する

C2が(2,3)で、そこから5行分の単語を出力するので(2,3,N)となります。
1列分も含めた(2,3,N,1)について、1列の場合は列の指定は省略が可能です。

ss.getRange(2,3,N).setValues(array2);

setValuesとsが付いているのは、出力する単語の数が5個と複数形になるからです。
コードと実行後のスプレッドシートです。

function standardInput3() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  const N=array[0];
  console.log(N);

  array.shift();
  console.log(array);

  const array2=[];
  for(let i=0;i<N;i++){
    array2.push([array[i]]);
  }

  console.log(array2);


  //スプレッドシートのC2(2,3)から始まる黄色いセルの範囲にN(=5)行分出力する
  ss.getRange(2,3,N).setValues(array2);

}

GASは以上です。

※ この記事の作成に参考になったサイトです ※
ありがとうございます。

Python mapの使い方
Python delの使い方


お疲れ様でした。ブレイクタイムPhotoは、

2024年いたばし花火大会です。

←前の問題へ          ループ1の1へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力7」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ


写真クリエイターとしての活動
自己紹介

paiza レベルアップ問題集 標準入力その7「STEP: 2 2 行目で与えられる N 個の文字列の入力」をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、Pythonでinputやsplitメソッド等を用いて、半角区切りの単語をリスト(配列)形式で標準入力を使って取得し、ループで出力することが可能になります。

GASではスプレッドシートで値を取得して、二次元配列にして出力しています。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、ご安心なさって下さい。)


2 行目で与えられる N 個の文字列の入力 (paizaランク D 相当)

問題:
1 行目に整数 N が与えられます。
2 行目に、N 個の文字列 s_1, … , s_N が半角スペース区切りで与えられます。
s_1, … , s_N を改行区切りで出力してください。

ではまず、Pythonで解いてみます。


手順として、

1: 1行目の単語(文字列)の数5個を変数Nに標準入力で整数として取得する

2: 2行目の半角スペース区切りの単語を標準入力と単語の区切り位置(半角スペース)分割を使ってリスト(配列)arrayに格納する


3: リストarrayをループで出力する
・基本的なループ
・リスト出力に適したループ
・上記の内包表記

の3ステップで行います。

今回は入出力例1を用います。

入力例1
5
paiza 813 paiza813 hello813 good

出力例1
paiza
813
paiza813
hello813
good

まず、準備として、paiza.ioにこのように入力します。
(入力例1 をコピペしたのみ)

問題集の入力例を貼り付けた画像

まず1行目の文字の数の5を標準入力で取得して変数Nに入力します。

N=int(input())

intの中に標準入力で取得するinputを入れると、数値を対象とした取得が可能になります。

#1行目の文字列の個数Nを標準入力で整数として取得する
N=int(input())

#Nに5が代入されたことを確認する
print(N)

下記の画像よりN=5が無事に取得出来ました。

単語の数が取得出来た出力結果の画像

次に2行目の文字列を半角区切りのリスト(配列)arrayに代入します。
複数のメソッドなどが登場しているので、この例に沿って役割をまとめます。

input … 標準入力で文字や数値を取得する

split … 半角スペースなどの指定の区切り文字で分割して取得する

str … 上記で取得する対象が単語(文字列)である


map … まとめて適用


list … リスト(配列)変換

このコードの実行結果です。
数値の個数5を含めた整数1行分がリストarrayとして出力されました。

#1行目の文字列の個数Nを標準入力で整数として取得する
N=int(input())

#Nに5が代入されたことを確認する
print(N)

#2行目の半角スペース区切りの文字列をリストarrayに格納する
array=list(map(str,input().split((' '))))

#arrayをリストの形に標準入力を用いて取得出来たことを確認
print(array)
配列で単語が取得出来きた画像

無事にリストとして格納されたことが確認出来ました。


では、リストの残ったarrayをループを用いて解答の出力例に沿って縦に出力します。
最も基礎的なループでは、この様な解説とコードになります。

for i in range(N):

ループの中では、iの値が0,1,2,3,4の5つ、1つずつ増えて行きます。
リストの添字は0から始まり、N=5ですのでarray[i]は、

array[0]=paiza
array[1]=813
array[2]=paiza813
array[3]=hello813
array[4]=
good

の5つの値が取得出来ます。

#1行目の文字列の個数Nを標準入力で整数として取得する
N=int(input())

#Nに5が代入されたことを確認する
#print(N) ← コメントアウト

#2行目の半角スペース区切りの文字列をリストarrayに格納する
array=list(map(str,input().split((' '))))

#arrayをリストの形に標準入力を用いて取得出来たことを確認
#print(array) ← コメントアウト

#基本的なループ
for i in range(N):
    print(array[i])

出力結果です。

単語のループを用いた出力結果の画像

次の少しだけ応用編(シンプルになるだけですので、大丈夫です)のループの出力に備えて、コメントアウトした分のコードを削除します。

#1行目の文字列の個数Nを標準入力で整数として取得する
N=int(input())

#2行目の半角スペース区切りの文字列をリストarrayに格納する
array=list(map(str,input().split((' '))))


#基本的なループ
for i in range(N):
    print(array[i])

確認用に出力したコメントアウトの部分を削除したスッキリしたコードになりました。


次に、リストを出力する際に、更に便利なループの表記方法について掲載致します。

for リストの要素の文字 in リスト名:

今回の例ですと、

for word in array:

等になります。

リストの要素の所は自分や他の方が見て分かりやすい「word」などにすると、「単語を取り出すんだな」と伝わりやすいです。

N=int(input())

array=list(map(str,input().split((' '))))


#arrayをリストに適したループで出力する
for word in array:
    print(word)

ループ以外のコメントを消しました。
少しだけシンプルなコードで同じ出力結果が得られました。


更にコード短くするには、ループをたった1行で表記する内包表記を用います。

[出力結果のprint文 for リストの要素の文字 in リスト名]

今回の例ですと、

[print(word) for word in array]

と表記致します。

N=int(input())

array=list(map(str,input().split((' '))))

#リストarrayを内包表記で出力する
[print(word) for word in array]

Pythonは以上です。
次は、GASで解いて行きます。


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

paiza側で入力例1をコピーして、スプレッドシート側ではショートカットキー、[Ctrl] + [Shift] + [V] で貼り付けると、元の書式を保って貼り付けられます。

スプレッドシートの初期状態の数値や文字列(単語5つ)

出力するC列の黄色いセルの部分は、左揃えにしました。

緑色のセルA1に単語(文字列)の個数の5、灰色の所に出力するN個の単語が入力されています。

スプレッドシートのアクセス回数を減らすために、この緑色の単語の個数と灰色の単語を同時に配列arrayで取得し、5個の単語のみをC2から始まる黄色いセルに出力します。

その際、この黄色いセルの所には、二次元配列として取得した整数が格納された配列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

2: 緑色のセルとA1灰色と灰色のセルA2を同時に配列arrayに取得して二次元配列になっていることをログで確認する


3: 5つの単語(文字列)の数を変数Nとして、N=array[0][0]と代入する


4: Nに代入した配列arrayの先頭array[0][0]をshiftメソッドで削除する

5: 残りの単語の部分を新たな配列array2にarray2=array[0][0].split(‘ ‘)と単語ごとに分割する

6: array2が単語ごとに分割は出来ても一次元配列になってしまったので、スプレッドシート出力前に新たな配列array3にmapを用いて二次元配列に変換する

7: array3をスプレッドシートのC2(3,2)から始まる黄色いセルに出力する


手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

このコードを関数「standardInput2」に書いていきます。

Standard Inputで標準入力の意味です。

function standardInput2() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}


手順2:緑色のセルA1と灰色のセルA2をまとめて配列arrayに取得する

const array=ss.getRange(1,1,2).getValues();

セルA1は(1,1)で2行分ですので、(1,1,2)になります。
列数の1列分も含めると(1,1,2,1)になりますが、1列の場合は省略できます。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();

  //緑色のセルA1(1,1)と灰色のセルの2行分を配列arrayに取得する
  const array=ss.getRange(1,1,2).getValues();

  //配列arrayが取得出来たことをログで確認
  console.log(array);

}

また、このコードの実行結果より、この配列が二次元配列として取得出来たことを確認します。

Google Apps Scriptで、文字数と単語の二次元配列の出力結果

この画像より、

array[0][0]=5
array[1][0]=出力する5つの単語

の二次元配列になっております。


手順3:配列先頭である単語の数5個を変数Nに代入して、N=array[0][0]として取得する

const N=array[0][0];

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();

  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  //単語(文字列)の数の5個をN=array[0][0]として取得する
  const N=array[0][0];

  //変数Nに5が代入されたことをログで確認する
  console.log(N);

}

先頭の単語の数5個をNに代入する。


手順4:変数Nに代入した配列arrayの先頭「5」をshiftメソッドで削除する

先頭の要素のみ削除するメソッドのshiftは今回のコードでは

array.shift();

この様に使用します。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();

  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  const N=array[0][0];
  console.log(N);

  //Nに代入した配列arrayの先頭の要素を削除する
  array.shift();

  //配列の先頭が削除されたことを確認する
  console.log(array);  

}

先頭の単語の個数5が削除出来た結果の画像


手順5:配列array2に残りのarrayの単語の部分をarray2=area[0][0].split(‘ ‘)として取得する

const array2=array[0][0].split(‘ ‘);

現在、配列arrayはスペースで区切られている一つの文字列になっています。
これをsplitメソッドを用いて分割して5つの単語にします。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();

  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  const N=array[0][0];
  console.log(N);

  array.shift();
  console.log(array); 

  //残りの単語array[0][0]をsplit(' ')を使って分割して配列array2に代入する
  const array2=array[0][0].split(' ');

  //配列array2が分割されたことを確認する
  console.log(array2);

}

このコードの実行結果です。

splitで分割は出来たが、一次元配列になってしまった。

分割は出来ましたが、一次元配列になってしまいました。
次の項目で二次元配列に変換します。


手順6:スプレッドシート出力前にarray3にmapを用いて二次元配列に変換する

const array3=array2.map(item=>[item]);

array2にmapメソッドを使って、[item]として二次元配列に変換しています。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();

  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  const N=array[0][0];
  console.log(N);

  array.shift();
  console.log(array); 

  
  const array2=array[0][0].split(' ');
  console.log(array2);

  //二次元配列に変換する
  const array3=array2.map(item=>[item]);

  //変換出来たことをログで確認する
  console.log(array3);

}

このコードの実行結果です。

二次元配列に変換出来た結果の画像

無事に二次元配列として出力出来ました。
これでスプレッドシートの出力する準備が整いました。


手順7: 配列array3をスプレッドシートのC2から始まる黄色いセルに出力する

ss.getRange(2,3,N).setValues(array3);

セルC2は(2,3)です。
Nには5が入っているので5行分使って5つの単語を出力します。
列数の1は省略可能です。

単語が5つですので、setValuesとsが付く複数形になっています。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();

  const array=ss.getRange(1,1,2).getValues();
  console.log(array);

  const N=array[0][0];
  console.log(N);

  array.shift();
  console.log(array); 

  
  const array2=array[0][0].split(' ');
  console.log(array2);

  
  const array3=array2.map(item=>[item]);
  console.log(array3);

  //スプレッドシートのC2(2,3)から始まる黄色いセルに出力する
  ss.getRange(2,3,N).setValues(array3);

}

実行後のスプレッドシートです。

最終的な、スプレッドシートの出力結果で、黄色いセルに5つの単語が出力sれた。

※ この記事の作成に参考になったサイトです ※
ありがとうございます。

Python mapの使い方

GASは以上です。


お疲れ様でした。ブレイクタイムPhotoは、

通勤経路で撮影した、雨粒のついたピンク色〜むらさき色の紫陽花です。
(スマホ写真のPhotoshop仕上げ)

←前の問題へ          次の問題へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力7」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ


写真クリエイターとしての活動
自己紹介

paiza レベルアップ問題集 標準入力その7「STEP: 1 改行区切りでの N 個の文字列の入力」をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、Pythonで標準入力inputを用いて、文字列の個数と全ての文字列をループの中で出力することが可能になります。

GASではスプレッドシートで値を取得して、二次元配列になっていることを確認してから出力をしています。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、ご安心なさって下さい。)


改行区切りでの N 個の文字列の入力 (paizaランク D 相当)

問題:
1 行目に整数 N が与えられます。
2 行目以降に、N 個の文字列 s_1, … , s_N が N 行で与えられます。
s_1, … , s_N を改行区切りで出力してください。

ではまず、Pythonで解いて行きます。


手順として、

1: 1行目の文字列の個数5個を標準入力で整数として取得して、変数Nに代入する

2: 2行目からN(=5)個の文字列をループの中で標準入力を用いてprint文で出力する

の2ステップで行います。

今回は入出力例1を用います。

入力例1
5
hello
paiza
813
paiza2020
Nice

出力例1
hello
paiza
813
paiza2020
Nice

まず、準備として、paiza.ioにこのように入力します。
(入力例1 をコピペしたのみ)

まず、1行目の文字列の個数5を変数Nに標準入力で取得します。

N=int(input())

intの中にinputを入れることで、整数として取得します。

#1行目の文字列の個数5を標準入力で整数として取得して変数Nに代入する
N=int(input())

#変数に取得できたことを出力して確認
print(N)

無事に文字列の個数5が変数Nに取得出来たことをprint文で出力した結果の画像です。


次に、ループを用いて5つの文字列を出力します。

for i in range(N):

今、Nに5が入っている状態です。

rangeの中にNを入れると、0から5未満の繰り返しが行われますので、iの動きは下記の様になります。

i=0
i=1
i=2
i=3
i=4

の5回分ループを回します。

temp=input()

ループの中で変数tempに標準入力で取得した文字を代入します。

このtempという変数は仮に、一時的に入れる箱として便利な変数名です。
その後、tempを出力しています。

tempには、文字列hello 〜 Nice までの5つの文字列を仮に入れて置く箱みたなものです。

N=int(input())
#print(N) ← コメントアウト

#2行目の文字列からN=5個の文字列を出力する
for i in range(N):
    temp=input()
    print(temp)

このコードの出力結果です。

Pythonは以上です。

次は、GASで解いて行きます。


今度は、同じ問題をGASで解いて行きます。
まず、スプレッドシートにこの様に配置しました。

スプレッドシートの文字揃えは、A列とC列の文字列部分を右揃えに統一しております。

緑色のセルA1(1,1)と、その下の灰色のセルに5個の文字列を貼り付けました。

paiza側の入力例1をコピーした後にスプレッドシート側で[Ctrl] + [Shift] + [V] のショートカットキーで貼り付けると元の書式を崩さずに綺麗に貼り付けられます。

灰色のセルA2から始まる5個の文字列の個数をN個として、文字列をC2(2,3)から始まる黄色いセルN=5行分出力します。

その際、この黄色いセルの所には、二次元配列として取得した整数が格納された配列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

2: 緑色のセルA1から下の灰色の5行の文字列を含めた6行分を配列arrayに取得
(この時点で二次元配列になっている)

3: 先頭のarray[0][0]を文字列の個数Nに代入


4: ShiftメソッドでNに代入した先頭の要素を配列arrayから取り除く


5: 文字列のみが残った配列arrayをスプレッドシートのセルC2(3,2)から始まる黄色いセル5行分に出力する

以上の手順で進めて参ります。


手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

関数「standardInput1」の中にコードを書いていきます。

Standard Inputで標準入力の意味です。

function standardInput1() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}


手順2:緑色のセルA1(1,1)から灰色のセルの文字列5つを合わせて、合計6行分を取得する

const array=ss.getRange(1,1,6).getValues();

文字列は複数になりますので、getValuesとsが付く複数形になります。

function standardInput1() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

  //緑色のセルA1から6行分(文字列の個数5と文字列自体の行の合計6行分)を配列arrayに取得
  const array=ss.getRange(1,1,6).getValues();

}

また、arrayは二次元配列として取得されます。
ログで確認致します。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,6).getValues();

  //arrayが二次元配列として取得されたことを確認する
  console.log(array);

}

実行結果によりarrayが二次元配列として取得出来たことが確認出来ました。

この配列の構成は、配列の添え字は0から始まりますので、

array[0][0]=5
array[1][0]=hello
array[2][0]=paiza
array[3][0]=813
array[4][0]=paiza2020

array[5][0]=Nice

の、6行1列配列として配列arrayが取得出来ました。


手順3:先頭のarray[0][0]を文字列の個数Nに代入

const N=array[0][0];

下記のコード実行後にN=5となっていることがログで確認出来ます。

function standardInput1() {

  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,6).getValues();
  console.log(array);

  //array[0][0]を文字列の個数として定数Nに代入する
  const N=array[0][0];

  //Nに文字列の個数5が代入されたことを確認する
  console.log(N);

}

手順4:ShiftメソッドでNに代入した先頭の要素array[0][0]を配列arrayから取り除く

array.shift();

下記のコードと実行結果で、文字数の個数である先頭の5が配列arrayから取り除けたことが確認出来ました。

function standardInput1() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,6).getValues();
  console.log(array);

  const N=array[0][0];
  console.log(N);

  //Nに代入した配列の先頭の要素をshiftを使って配列arrayから削除
  array.shift();

  //先頭の文字数5が削除されたことを確認
  console.log(array);

}

この画像から配列arrayが単語5つのみであり、尚且つarrayが既に二次元配列になっていることが確認出来ましたので、このままスプレッドシートの黄色いセルに貼り付ける処理に進めます。


手順5:スプレッドシートのC2(2,3)から始まる黄色いセルに文字列を5行分出力する

ss.getRange(2,3,N).setValues(array);

getRangeの中でセルC2である(2,3)と行数分の5が入っているNが使われています。
単語数が5つですので、複数形でsetValuessが付いています。

1列ですので、(2,3,N,1)と列数も指定出来ますが、1列の場合は省略可能です。
コードと実行後のスプレッドシートです。

function standardInput1() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,1,6).getValues();
  console.log(array);

  const N=array[0][0];
  console.log(N);

  array.shift();
  console.log(array);
  
  //スプレッドシートのセルC2(2,3)から始まる黄色いセルに配列arrayを出力する
  ss.getRange(2,3,N).setValues(array);

}


お疲れ様でした。ブレイクタイムPhotoは、

梅雨の時期に代々木公園で撮影した紫陽花です。

←標準入力その6へ          次の問題へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力7」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ


写真クリエイターとしての活動
自己紹介

paiza レベルアップ問題集 標準入力6「【N 個の整数の入力】1 行目で与えられる N 個の整数の入力 (large)」をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、Pythonで標準入力inputや分割splitなどを用いて、数値の個数と全ての数値をループの中で出力することが可能になります。

GASではスプレッドシートで値を取得して、二次元配列にして出力しています。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、ご安心なさって下さい。)


【N 個の整数の入力】1 行目で与えられる N 個の整数の入力 (large) (paizaランク D 相当)

問題:
1 行目で、整数 N と、続けて N 個の整数 a_1, … , a_N が半角スペース区切りで与えられます。
a_1, … , a_N を改行区切りで出力してください。

ではまず、Pythonで解いて行きます。


手順として、

1: 1行目を標準入力inputやsplitなどを使って半角スペース区切りにした整数をリストarrayとして取得する

2: arrayの最初の数は整数の個数ですので、整数の個数を表す変数Nに代入して、N=array[0]とする


3: 上記で変数Nに代入したarray[0]を配列から削除するためにdelメソッドを使ってリストarrayを出力する5つの整数のみにする

4: 残りのリストarrayをループで出力する

・基本的なループ
・リスト出力に適したループ
・上記の内包表記

の4ステップで行います。

今回は入出力例1を用います。

入力例1
5 8 1 3 1 3

出力例1
8
1
3
1
3

まず、準備として、paiza.ioにこのように入力します。
(入力例1 をコピペしたのみ)

paiza問題集の入力例。1行に数値の個数と数値自体が入力されている。

この6個の数値「5 8 1 3 1 3」は下記のコードでリスト形式で取得出来ますが、1行に複数の関数などが使われているので、今回の例に即して簡潔にお伝えします。

input … 標準入力で文字や数値を取得する

split … 半角スペースなどの指定の区切り文字で分割して取得する

int … 上記で取得する対象が整数である


rstrip … 右側にある不要な空白を取り除く


map … まとめて適用


list … リスト(配列)変換

#1行分を全てリスト形式になる様に標準入力で取得する
array=list(map(int,input().rstrip().split(' ')))

#リストarrayに取得出来たことを確認する
print(array)

このコードの実行結果です。
数値の個数5を含めた整数1行分がリストarrayに出力されました。

取得したリストarray


このコードの先頭の5、つまりarray[0]を数値の個数を表す変数Nに代入します。

array=list(map(int,input().rstrip().split(' ')))
print(array)

#リストの先頭の「5」をリストの個数を表す変数Nに代入する
N=array[0]

#Nに代入できたことを確認する
print(N)

このコードで、無事にNに5が代入されました。

リストから数値の個数の先頭の5を代入されたことを確認。


現在のarrayから、リストの個数であるNに代入した先頭の5をdelメソッドを使って削除します。

array=list(map(int,input().rstrip().split(' ')))
print(array)

N=array[0]
print(N)

#数値の個数Nに代入したリストarrayの先頭の5を削除する
del array[0]

#削除されたことを確認する
print(array)
リストから先頭の要素をdelで取り除いた画像。

リストarrayから個数が削除され、出力すべき数値のみになりました。


では、リストの残ったarrayをループを用いて解答の出力例に沿って縦に出力します。
最も基礎的なループでは、この様な解説とコードになります。

ループの中では、iの値が0,1,2,3,4の5つ、1つ分増えて行きます。
リストの添字は0から始まり、N=5ですのでarray[i]は、

array[0]=8
array[1]=1
array[2]=3
array[3]=1
array[4]=3

の5つの値が取得出来ます。

for i in range(N):

array=list(map(int,input().rstrip().split(' ')))
print(array)

N=array[0]
print(N)

del array[0]
print(array)

#基本的なループでリストarrayを出力
for i in range(N):
    print(array[i])

出力結果です。

ループを用いたリストの出力結果の確認

ここで、確認用に出力した変数や配列をコメントアウトします。

array=list(map(int,input().rstrip().split(' ')))
#print(array) ←コメントアウト

N=array[0]
#print(N) ←コメントアウト

del array[0]
#print(array) ←コメントアウト

#基本的なループでリストarrayを出力
for i in range(N):
    print(array[i])

基本的なループを用いて、解答の形に沿った縦型に出力出来ました。

paiza問題集ループを用いたリストの出力結果

次の少しだけ応用編(シンプルになるだけですので、大丈夫です)のループの出力に備えて、コメントアウトした分のコードを削除します。

array=list(map(int,input().rstrip().split(' ')))
N=array[0]
del array[0]


#基本的なループでリストarrayを出力
for i in range(N):
    print(array[i])


次に、リストを使った、更に便利なループの表記方法について掲載致します。

for リストの要素の文字 in リスト名:

今回の例ですと、

for num in array:

等になります。

リストの要素の所は自分や他の方が見て分かりやすい「num」などにすると、「整数を取り出すんだな」と伝わりやすいです。

array=list(map(int,input().rstrip().split(' ')))
N=array[0]
del array[0]


#arrayをリストに適したループで出力する
for num in array:
    print(num)

少しだけシンプルなコードで同じ出力結果が得られました。


更にコード短くするには、ループをたった1行で表記する内包表記を用います。

[出力結果のprint文 for リストの要素の文字 in リスト名]

今回の例ですと、

[print(num) for num in array]

と表記致します。

array=list(map(int,input().rstrip().split(' ')))
N=array[0]
del array[0]


#リストarrayを内包表記で出力する
[print(num) for num in array]

Pythonは以上です。
次は、GASで解いて行きます。


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

paizaの問題集をGoogle Apps Scriptで解くためのスプレッドシートの初期画像

入力の緑のセルA2の所に、paiza側の入力例1を貼り付けています。
その際、paiza側でコピーをした後、スプレッドシートのA2のところで、[Ctrl] + [Shift] + [V] を押すと、書式を崩さずに綺麗に貼り付けられます。

緑色のセルA2(2,1)の所に出力する数値と先頭の数値の個数5個を加えた「5 8 1 3 1 3」が入力されています。

先頭の5を除いた数値をC2(2,3)から始まる黄色いセル5行分に出力します。

その際、この黄色いセルの所には、二次元配列として取得した整数が格納された配列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

2: 緑色のセルA2(2,1)を配列arrayに取得


3: 取得したarrayをログ出力


4: 数値の個数array[0]=5を定数Nに代入する


5: Nに代入したarray[0]を削除して出力する分の数値のみを残す

6: スプレッドシートに出力用の空の配列array2を宣言して、残った一次元配列であるarrayの要素をループを用いて二次元配列array2に格納する


7: スプレッドシートに出力する前に二次元配列array2をログ出力する


8: スプレッドシートのC2(2,3)から始まる黄色いセルに5行分出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

下記のコードを関数「standardInput5」の中に書いて行きます。

Standard Inputで標準入力の意味です。

function standardInput5() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}


手順2:緑色のセルA2(2,1)を配列arrayに取得

const array=ss.getRange(2,1).getValue().split(‘ ‘);

function standardInput5() {

  const ss=SpreadsheetApp.getActiveSheet();

  //色のセルA2(2,1)を配列arrayに取得
  const array=ss.getRange(2,1).getValue().split(' ');

}


手順3:取得したarrayをログ出力

console.log(array);

コードと実行結果です。

function standardInput5() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');

  //取得したarrayをログ出力する
  console.log(array);

}

取得した配列array


手順4:数値の数であるarray[0]=5を定数Nに代入する

const N=array[0];

下記のコードと実行結果です。

function standardInput5() {

  const ss=SpreadsheetApp.getActiveSheet();

  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  //数値の数であるarray[0]=5を定数Nに代入する
  const N=array[0];

  //Nに5が代入されたことを確認する。
  console.log(N);

}

配列の先頭要素を定数Nに数値の個数として代入した実行結果の画像

配列arrayの先頭の5が無事にNに代入されました。


手順5: Nに代入したarray[0]を削除して出力する分の数値のみを残す

array.shift();

このshiftを用いて、arrayの先頭の数値の個数を削除します。

function standardInput5() {

  const ss=SpreadsheetApp.getActiveSheet();

  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  const N=array[0];
  console.log(N);

  //Nに代入した配列arrayの先頭を削除
  array.shift();

  //配列から先頭にあった数値の個数5が削除されていることを確認
  console.log(array);

}
配列にshiftを用いて、先頭の要素を削除した後の配列array

この様に、配列.shift();を使うと先頭の要素が削除されたことが確認出来ました。


手順6:スプレッドシートに出力用の空の配列array2を宣言して、残った一次元配列であるarrayの要素をループを用いて二次元配列array2に格納する

ループの部分は、

let i=0; i<N ; i++

と表記しています。
iには、array[i]の添え字として0から4まで入ります。
N=5ですので、i<Nになります。

array2.push([array[i]]);

また、ループの中で[array[i]]とarray[i]全体にカッコで括っているのは、二次元配列としてarray2に追加をしている為です。

function standardInput5() {

  const ss=SpreadsheetApp.getActiveSheet();

  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  const N=array[0];
  console.log(N);

  array.shift();
  console.log(array);

  //スプレッドシート出力用の空の配列array2を宣言
  const array2=[];

  //ループを用いて残りのarrayを二次元配列としてarray2に格納する
  for(let i=0;i<N;i++){
    array2.push([array[i]]);
  }

}


手順7:スプレッドシートに出力する前に二次元配列array2をログ出力する

console.log(array2);

前の手順でarrayからpushを持ちて二次元配列になるようにループで格納したarray2がスプレッドシートに出力可能な二次元配列の形になっていることを確認します。

array2がスプレッドシートに出力可能な二次元配列になっていることをログで確認


手順8:スプレッドシートのC2(2,3)から始まる黄色いセルに5行分出力する

ss.getRange(2,3,N).setValues(array2);

セルC2が(2,3)です。
getRange(2,3,N)でN行、つまり5行分出力をします。
getRange(2,3,N,1)と書くと1列分の列数も指定出来るのですが、1列の場合は省略可能です。

setValuesとsが付く複数形になっているのは、出力用配列array2に格納された数値の個数が5個と複数になっているからです。

コード実行後のスプレッドシートです。

function standardInput5() {

  const ss=SpreadsheetApp.getActiveSheet();

  const array=ss.getRange(2,1).getValue().split(' ');
  console.log(array);

  const N=array[0];
  console.log(N);

  array.shift();
  console.log(array);

  const array2=[];

  for(let i=0;i<N;i++){
    array2.push([array[i]]);
  }

  console.log(array2);

  //スプレッドシートのC2(2,3)から始まる黄色いセルにN=5行分の数値を出力する
  ss.getRange(2,3,N).setValues(array2);

}
Google Apps Script実行後のスプレッドシート。二次元配列の数値を黄色いセルの所に出力している。

無事に黄色いセルに数値5個分が出力されました。

※ この記事の作成に参考になったサイトです ※
ありがとうございます。

Python「rstrip() メソッド」で文字列の右端を整えよう!
Python mapの使い方
Pythonでlistから要素を削除する方法

GASは以上です。


お疲れ様でした。ブレイクタイムPhotoは、

奥多摩の秋川渓谷を散策中に撮影した、東京都檜原村にある「払沢の滝」滝壺です。

←前の問題へ          標準入力その7→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力6」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介