NaaN日記

やったこと、覚えたことを発信する場

リスト(Python)

こんばんは、内容の順番がバラバラだなと思っています。
今回はリストについてです。
これからは内容だけでなく言語もバラバラになる予感がしています。
お気づきかもしれませんが、日によって常体敬体すらバラバラです。
今日は敬体の日です。

リストの定義
a = ["あ","い","う","え","お"]
#a = [要素1, 要素2, 要素3,......]
指定
a[0] #1番目の要素('あ')
a[-1] #最後の要素('お')
要素の書き換え
b = ["ka","き","く","け","こ"]
b[0] = "か"
#['か', 'き', 'く', 'け', 'こ']
要素の消去
#a = ['あ', 'い', 'う', 'え', 'お']
del a[-1]
#['あ', 'い', 'う', 'え']
スライスも使える
#a = ['あ', 'い', 'う', 'え']
del a[:3]
#['え']
要素を末尾に追加
#a = ['え']
a.append("お")
#['え', 'お']
要素を指定する場所に追加
#a = ['え', 'お']
a.insert(0,"あ")
#['あ', 'え', 'お']
スライスを使って追加
#a = ['あ', 'え', 'お']
a[1:1] = ["い","う","お"]
#['あ', 'い', 'う', 'お', 'え', 'お']
スライスを使って置換
#a = ['あ', 'い', 'う', 'お', 'え', 'お']
a[2:4] = ["う"] 
#['あ', 'い', 'う', 'え', 'お']
リストの足し算
a + b
#['あ', 'い', 'う', 'え', 'お', 'か', 'き', 'く', 'け', 'こ']
リストの結合
a.extend(b) #aのリストの最後にbのリストを結合
#a = ['あ', 'い', 'う', 'え', 'お', 'か', 'き', 'く', 'け', 'こ']

スライス(Python)

今回はスライスについて。
スライスを使うと、リストやタプルの要素、文字列の範囲を指定して、
必要な部分だけを取り出すことができる。

[start:stop]
num = {1,2,3,4,5,6,7,8,9}
print(num[2:5]) #num[2]からnum[4]まで
#[3, 4, 5]

また、

print(num[-1])
#9

であり、スライスでも負の値で場所を指定できる。

print(num[1:-1]) #num[1]からnum[-2]まで
#[2, 3, 4, 5, 6, 7, 8]
[start:stop:step]

増加量の指定も可能

print(num[1:5:2]) #num[1]からnum[4]まで2ずつ
#[2, 4]


増加量には負の値も指定できる

print(num[5:1:-1]) #num[5]からnum[2]まで1ずつ減少
#[6, 5, 4, 3]
省略

また、全ての範囲で実行したい場合、一つ目のコロンの両端の値を省略できる

print(num[::2])
#[1, 3, 5, 7, 9]

増加量も省略すると、num[0]からnum[-1]まで全ての範囲が表示される

print(num[::]) # ==print(num[:])==print(num)
#[1, 2, 3, 4, 5, 6, 7, 8, 9]

最初の位置を省略

print(num[:0:-1]) #num[-1]からnum[1]まで1ずつ減少
#[9, 8, 7, 6, 5, 4, 3, 2]

最後の位置を省略

print(num[-1::-1]) #num[-1]からnum[0]まで1ずつ減少
#[9, 8, 7, 6, 5, 4, 3, 2, 1]

つまり、最初と最後の位置を省略すると

print(num[::-1]) #num[-1]からnum[0]まで1ずつ減少
#[9, 8, 7, 6, 5, 4, 3, 2, 1]

つまり、[::-1]をつかうと逆順に並べ替えることができる
(いまいち活用法が思い浮かびませんが)

使ってみる

例えば、a,b,cと入力してc,b,aと出力したいとき、
スライスを使わずにやってみようとしたらこんなことに

char = input()
moji = list(char)
length = len(moji)
while 0 <= length-1:
    print(moji[length-1], end = '')
    length -= 1

長い!!そして美しくないと怒られそう

スライスを使うととてもコンパクトになる

char = input()
rahc= char[::-1] 
print(rahc)

for文その2(Python)

その2です。


fileを行単位で表示する

for file in open("memo.txt"):
    print(file)
#ファイルの中身が表示される

各要素のキーを表示させたい

dic = {"keya": 1, "keyb": 2, "keyc": 3}
for k in dic:
    print(k)
#keya
#keyb
#keyc

keys()でもいける

dic = {"keya": 1, "keyb": 2, "keyc": 3}
for k in dic.keys():
    print(k)
#keya
#keyb
#keyc

値を表示させたい
values()

dic = {"keya": 1, "keyb": 2, "keyc": 3}
for v in dic.values():
    print(v)
#1
#2
#3

キーと値両方を表示させたい
items()

dic = {"keya": 1, "keyb": 2, "keyc": 3}
for k, v in dic.items():
    print(k, v)
#keya 1
#keyb 2
#keyc 3

番号と値を表示させたい
enumerate()

dic = {"keya": 1, "keyb": 2, "keyc": 3}
for num, value in enumerate(dic):
    print(num,dic[value])
#0 1
#1 2
#2 3

enumerate(dic,1)のように第二引数を指定すると、途中からカウントを始められる。

dic = {"keya": 1, "keyb": 2, "keyc": 3}
for num, value in enumerate(dic,1):
    print(num, dic[value])
#1 1
#2 2
#3 3


二つ以上のイテラブルオブジェクトをまとめて表示させたい
zip()

a = ["あ","か","さ","た","な"]
b = ["い","き","し","ち","に"]
c = ["う","く","す","つ","ぬ"]
d = ["え","け","せ","て","ね"]
e = ["お","こ","そ","と","の"]
for a,b,c,d,e in zip(a,b,c,d,e):
    print(a,b,c,d,e)
#あ い う え お
#か き く け こ
#さ し す せ そ
#た ち つ て と
#な に ぬ ね の

素数が異なる場合、多い要素は切り捨てられる。

for文その1(Python)

今日は、Pythonでのfor文についてです。
○基本の形

for 変数 in イテラブルオブジェクト:
    処理

イテラブルオブジェクトには辞書やリストやタプルがありますが、
イテレーションの仕組みについては理解力が追い付かなかったので後々理解したい。


繰り返す回数が決まっているときはrange()を使う

for 変数 in range(最初の数値,最後の数値,増加量):
#rangeでは、
#最初の数値と増加量は省略できる。
#最初の数値から最後の数値-1まで入ったリストが生成される。

こんな感じに3を5回0に足したりできる。(良い使い道がすぐにでてこない)

sum = 0
for i in range(5):
    sum += 3
    print(sum, end = ' ')#3 6 9 12 15 

Pythonではfor文の後に続けてelseが使える。

for i in range(5):
    print(i*i)
else:
    print("おわり")

ただし、次のように途中でループを抜けてしまうとelseは実行されない。

for i in range(5):
    print(i*i)
    if i == 3:
        break
else:
    print("おわり")

その2に続かせたい

空白で分けて配列に突っ込む

こんばんは

今回はPython

「数字を空白で区切って入力し、入力した数字を全て足す」

ことを覚えました。

つまり、2 2 2と入力すると6が表示されるようにしたい。

何も考えず普通にinputすると"2 2 2"の文字列で認識されて計算できない。
当たり前ですね。

x = input() #文字列がinputされる
x = x.split() #スペースで区切られたリストの生成
n = [] #リスト作成
for i in x:
    n.append(int(i)) #リストに要素を追加(int型)
print(sum(n)) #足して表示

と長いなあと思っていたら、二行でできるみたいです。

n = [int(x) for x in input().split()]
print(sum(n))

こんなことできるんだ、という思い。これから理解していきたいです。

認識の誤りや、他の方法、書き方の改善点などがあれば教えてください。

はじめに

はじめまして

この春、工学系の大学生になった者です。

大学に入って2か月目に突入し、文章を書きたい気分になったのでブログを始めます。

ここでは、知識ほぼ0の状態からプログラミングの勉強をして、感じたことや学んだことを記述していきます。つまり成長記録です。

なお、初期状態は

「HTMLとCSSをインタネットで調べながらコピー&ペーストで書き換えることが出来る」

程度です。

進捗状況を随時記入していきたいと考えています。

よろしくお願いします。