3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

python データ構造メモ

Last updated at Posted at 2018-10-03

ゲームを作りながら楽しく学べるPythonプログラミング
の書籍を元に、気になったもの・多用しそうなものだけをざっくりとまとめた

データ構造は リスト・タプル・辞書の3種類ある
リスト・タプル・集合・辞書の4種類ある

リスト(list)

可変の配列
途中で値の変更、要素の追加・削除ができる

>>> subject = [78, 95, 68, 62] # リスト定義
>>> subject
[78, 95, 68, 62]
>>> 
>>> subject[0] = 70 # 値の変更
>>> subject
[70, 95, 68, 62]
>>> 
>>> subject.append(34) # 要素の追加
>>> subject
[70, 95, 68, 62, 34]

タプル(tuple)

不変の配列
途中で値の変更、要素の追加・削除ができない

>>> subject = (78, 95, 68, 62) # タプル定義
>>> subject
(78, 95, 68, 62)
>>> 
>>> subject[0] = 70 # 値の変更
Traceback (most recent call last): # エラー
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> 
>>> subject.append(34) # 要素の追加
Traceback (most recent call last): # エラー
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'

アンパック

タプルを各変数に代入することもできる(リストでも可)

>>> pos = (56, 74)
>>> pos_x, pos_y = pos
>>> pos_x
56
>>> pos_y
74

集合(set)

リストと似ているが、
重複した要素は持たない、順番が無いのが特徴

>>> basket={"apple", "orange", "banana"} # setオブジェクト定義. set(["apple", ...])の形でも可
>>> basket
{'orange', 'apple', 'banana'}
>>> basket.add("melon") # 要素追加
>>> basket
{'orange', 'melon', 'apple', 'banana'}
>>> basket.add("apple") # 重複した要素を追加した場合、無視される
>>> basket
{'orange', 'melon', 'apple', 'banana'}
>>> 

# 集合の計算も可能
>>> a = {1, 2, 4, 8, 16}
>>> b = {1, 2, 3, 5, 8}
>>> a | b # 和集合
{1, 2, 3, 4, 5, 8, 16}
>>> a & b # 積集合
{8, 1, 2}
>>> a ^ b # 排他的論理和
{16, 3, 4, 5}
>>> a - b # 差集合
{16, 4}
>>> b - a
{3, 5}

辞書(dict)

{キー: 値} がペアのリスト
可変なので、後から追加・編集も可能

>>> score = {
... "math":78,
... "english":95,
... "chemistry":68,
... "science":62, # 最後に 「,」付いてても エラーにならないのが地味にうれしい
... }
>>> score
{'math': 78, 'english': 95, 'chemistry': 68, 'science': 62}
>>> score["math"] # キーを指定
78
# 追加
>>> score["japanese"] = 23
>>> score["japanese"] # キーを指定
23
# 編集
>>> score["math"] = 68
>>> score["math"] # キーを指定
68

# 辞書の中に辞書も入れられる
>>> score = {
... "math":{
... "mathA":50,
... "mathII":28
... },
... "english":95,
... }
>>> score
{'math': {'mathA': 50, 'mathII': 28}, 'english': 95}
>>>
>>> score["math"]["mathA"] # キーを指定
50

リストやタプル利用する上で便利な関数

copy

指定したリスト、タプルを複製する
辞書でも可能

>>> a = [1,2,3]
>>> b = a.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

# aの3番目の要素に9を代入
>>> a[2] = 9
>>> a
[1, 2, 9]
# 別参照なので、b[2]は3のまま
>>> b
[1, 2, 3]
>>> 

代入の場合は a bともに同じ場所を参照してしまう

>>> a = [1,2,3]
>>> b = a
# aの3番目の要素に9を代入
>>> a[2] = 9
>>> a
[1, 2, 9]
# 同じ場所を参照しているので、b[2]も9
>>> b
[1, 2, 9]

in演算子

ある値がリストやタプルに含まれているか

調べたい値 in リスト/タプル

>>> greets = ("morning", "afternoon", "evening")
>>> "noon" in greets
False
>>> "afternoon" in greets
True

print関数

引数で与えられた情報をコンソールに表示する

>>> print("hello")
hello

# 引数を複数指定することも可能
>>> print("Hi!", "Python", 3)
Hi! Python 3

%演算子を使う方法

"文字列" % ("値")

>>> "1=%s 2=%s" % ("Hello", "World")
'1=Hello 2=World'

>>> "value=(%d, %.1f)" % (2.5, 2.5)
'value=(2, 2.5)'

formatメソッドを使う方法

新しく追加された方法でこっちが主流らしい
python3.6 から新しく f-strings(フォーマット済み文字列リテラル)が追加された。

{} が埋め込み文字

"埋め込み文字を含めた文字列".format("値")

>>> "1={} 2={}".format("Hello", "World")
'1=Hello 2=World'
>>> "value=({}, {})".format(2, 2.5)
'value=(2, 2.5)'

# {}の中に番号をつけることで、任意の順番にもできる
>>> "value=({1}, {0})".format(2, 2.5)
'value=(2.5, 2)'

# 名前をつけることも可能
>>> "value=({latitude}, {longitude})".format(latitude=35.6, longitude=139.6)
'value=(35.6, 139.6)'

f-strings(フォーマット済み文字列リテラル)を使う方法

python3.6で追加された手法
接頭辞 f (Fでも可) + "文字列"

>>> latitude = 35.6
>>> longitude = 139.6
>>> f"value=({latitude}, {longitude})"
'value=(35.6, 139.6)
3
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?