リストの結合、挿入
リストを結合するにはextend関数を使います。
基本的に末尾に追加されます。
例)
daiku = [“左官”, “鳶”, “木挽”]
daiku.extend([“墨”,”墨汁”])
print(daiku)
出力結果)
[‘左官’, ‘鳶’, ‘木挽’, ‘墨’, ‘墨汁’]
指定した位置に挿入する場合はinsert関数です。
第一引数に位置、第二引数に挿入する要素を入れます。
例)
daiku = [“左官”, “鳶”, “木挽”]
daiku.insert(0,”墨”)
daiku.insert(2,”墨汁”)
print(daiku)
出力結果)
[‘墨’, ‘左官’, ‘墨汁’, ‘鳶’, ‘木挽’]
0は一番最初なので、最初が墨、3番目に墨汁が追加されました。
複数行のデータを取り込む
8.リスト(2)listの操作で標準入力を使用した取り込みを行いましたが、input()は単行を取り込むので、次は複数行を取り込んでみましょう。
複数行は少し手順が長くなり、モジュールのインポートが必要になります。
インタプリタや実行環境に関連した変数や関数のモジュールは「import sys」です。
この中から標準入力に関するstdin、1行を入力するreadline、あるいは複数行を入力するreadlinesという関数を使います。
input()とほぼ同様の機能で、入力数が多い場合、こちらのほうが早くなります。input() は改行文字を削除しますが、readline() は標準入力をそのまま取得します。
ではコードを書きましょう。
入力例)
import sys
for txt in sys.stdin.readlines():
print(txt.rstrip())
sysをインポートします。for文開始。txtという名前で標準入力、複数行取得を行います。txtの中身を右側削除で出力します。
入力例)
曹操
董卓
魏延
出力例)
曹操
董卓
魏延
これがただの取り込みの場合です。では、リストに格納しましょう。
例)
import sys
array = []
for txt in sys.stdin.readlines():
array.append(txt.rstrip())
print(array)
- sysをインポートします。
- 空のリストを作ります。
- for文開始。txtという名前で標準入力、複数行取得を行います。
- 空リストに対しtxtを右削除で追加します。
- リストの中身を出力します。
入力例)
曹操
董卓
魏延
出力例)
[‘曹操’, ‘董卓’, ‘魏延’]
リストの形になった事がわかります!
次は、先程のsplit関数を使って「,」を切り取りポイントに文章にしてみましょう。
項目と個数を入力するとメッセージを出す事にしてみましょう。
例)
import sys
for txt in sys.stdin.readlines():
words = txt.rstrip().split(“,”)
print(words[0] ,end=””)
print( “が” + words[1] + “騎あらわれた!” )
- sysをインポートします。
- for文開始。txtという名前で標準入力、複数行取得を行います。
- wordsに対しtxtを右削除で追加します。
- 文章中に”,”が現れたら分割を行います。
- リストのインデックス0を出力し、改行無しにします。
- 続きのインデックス1を出力します。
入力例)
青州兵,4
出力結果
青州兵が4騎あらわれた!
精強な青州兵が4騎も来たらピンチですね。
乱数と組み合わせる
さて今度は3.乱数で作ったおみくじを標準入力で作ってみましょう。
運勢の種類、数が表示されて、最後だけランダムに結果が現れる事にします。
例)
import random
txt = input().rstrip().split(“,”)
for enemy in txt:
print(“敵勢力は” + enemy)
num = len(txt)
print(“現れる敵は” + str(num) + “種類います”)
encount = random.randrange(num)
print(“敵に遭遇!「” + txt[encount] )
- 乱数のモジュールをインポートします。
- txtという変数に、標準入力・右側削除・カンマ区切りで代入します。
- for分開始。enemyという名前でtxtの数だけ繰り返します。
- ループ内でtxtの数だけ中身を出力します。
- 入力されているリストの数を数えます。
- リストの数を出力します。
- encountの中に乱数の整数を代入します。
- 出力結果をtxtリストのインデックスをランダムにする事でおみくじにします。
入力例)
尾張兵だ・・・行けるぞ,越後兵だ!冬までしのげ,越前兵だ、切り抜けろ!,最悪だ!武田家山県隊だ!
出力例)
敵勢力は尾張兵だ・・・行けるぞ
敵勢力は越後兵だ!冬までしのげ
敵勢力は越前兵だ、切り抜けろ!
敵勢力は最悪だ!武田家山県隊だ!
現れる敵は4種類います
敵に遭遇!「尾張兵だ・・・行けるぞ
ちょっと文章がおかしい気もしますが、実際に使うわけではないのでこんな感じでどうでしょう?