91
92

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 3 years have passed since last update.

初心者メモ:PythonのList/Tuple/Set/Dictのチートシート

Last updated at Posted at 2018-02-11

はじめに

こんにちわ!Python入門中の石田です。あれこれ本を読んで勉強しているのですが、List->Tuple->Set->Dict ...と進んでいくうちに「あれ、この機能はListだと何だっけ?」とか「Listの追加はappend()だけどSetの追加はadd()かよ!」とか、元々物覚えの悪い頭が更に混乱してきました。ので4つの代表的なデータ構造を自分なりにExcelにチートシートの形でまとめてみたのですが、qiitaにも置いておこうと思ったので公開させて頂きます。基本、自分用のメモのつもりですが、タイポや誤り指摘・アドバイスなどいただけたら有難く。

  • 環境:Python 3.6.4
  • 初回執筆時点:2018/2/11 (随時更新)
  • 2018/2/12 shiracamusさんの補足・アドバイスを反映
  • 2020/12/10 @tomoykさんのアドバイスを反映

チートシート

(テーブル幅の関係で一部読みづらくてすいません)

list tuple set dictionary
123456789012 12345678901234567 12345678901234567 12345678901234567 12345678901234567
要素の順番(order) あり(シーケンス) あり(シーケンス) なし 3.7~あり ※注
変更 可(Mutable) 不可(Immutable) 可(Mutable) 可(Mutable)
重複 要素の重複を許容する 要素の重複を許容する 要素の重複を許容しない キーの重複を許容しない
値の重複を許容する
補足 辞書のキーにできない
setの要素にできない
listよりメモリ使用量スペースが少ない
辞書のキーにできる
setの要素にできる
簡易的なClassの代わりにnamed tuplesが使える
集合演算が可能
要素はユニーク
追加・置換はUpsert
listやtupleの重複排除に利用可
keyはユニークであること
keyが重複した場合は値を上書き(upsert)
空の状態での作成 l1 = list()
l1 = []
t1 = tuple()
t1 = ()
s1 = set() d1 = dict()
d1 = {}
初期化 l1 =['a', 'b','c'] t1 = ('a','b','c')
t1 = 'a', 'b', 'c'
#一要素ではカンマを忘れずに
t1 = ('a',)
t1 = 'a',
s1 = {'a', 'b', 'c'} d1 = {'a': 1, 'b': 2, 'c': 3}
初期化
(Class指定)
l1 = list(['a', 'b', 'c'])
l1 = list(('a', 'b', 'c'))
t1 = tuple(('a', 'b', 'c'))
t1 = tuple(['a', 'b', 'c'])
s1 = set({'a', 'b', 'c'})
s1 = set(['a', 'b', 'c'])
s1 = set(('a', 'b', 'c'))
d1 = dict(a=1, b=2, c=3)
d1 = dict({'a':1, 'b':2, 'c':3})
d1 = dict((('a',1), ('b',2), ('c',3)))
要素数の取得 len(l1) len(t1) len(s1) len(d1)
追加 # 末尾へ
l1.append('d')
l1 += ['d']
# 特定の位置へ
l1.insert(1, 'e')
l1[1:1] = 'e'
- s1.add('d')
s1 |= {'d'}
d1[key] = val
d1.update({'e': 4})
d1.update(e=4)
d1.update(dict(e=4))
置換 l1 = ['a', 'b', 'c']
l1[2] = 'x'
#無いとIndexError
l1[9] = 'x'
#これはOK(末尾追加)
l1[9:] = 'x'
- 追加と同じ(upsert) 追加と同じ(upsert)
削除( by Position ) del l1[2] - - -
削除( by Value ) l1.remove('a') - s1.remove('d')
s1 -= {'d'}
-
削除( by Key ) - - - del d1[key]
削除( 全件クリア ) l1.clear()
del l1[:]
# 無理矢理だが
t1 = tuple()
s1.clear()
s1 = set()
d1.clear()
d1 = {}
要素の参照
(スライス)
# start
l1[0]
# start:end
l1[0:2]
# last
l1[-1]
# by 2
l1[::2]
listと同じ - -
取得&削除 # デフォ=末尾から(-1)
# 無いとIndexError
l1.pop()
# 位置指定
l1.pop(2)
- #無いとKeyError
s1.pop('a')
# 無いとdefault
s1.pop('a', default)
# 無いとKeyError
d1.pop(key)
# 無いとdefault
d1.pop(key, default)
LIFO(Stack) #追加
append()
#取り出し(pop(-1)と同じ)
pop()
- - -
FIFO(Queue) #追加
append()
#取り出し
pop(0)
- - -
要素の位置を取得 l1.index('b') listと同じ - -
存在チェック #True/False
'a' in l1
listと同じ listと同じ key in d1 #True/False
val in d1.values() #True/False
二次元 l1 =[[1,2],[3,4],[5,6]]
# 要素の参照
l1[1][2]
t1 = ((1,2),(3,4),(5,6))
# 要素の参照
t1[1][1]
s1 = {(1,2), (3,4)}
#setの入れ子は不可
× s1 = {{1, 2}, {3, 4}}
# valにdictを格納可能
d1 = {'a': {'x': 1}, 'b': {'y': 2}}
マージ l1 = [1,2,3]
l2 = [4,5,6]
l1.extend(l2)
- s1 = {1, 2, 3}
s2 = {4, 5, 6}
s3 = s1.union(s2)
d1 = {'a': 1, 'b': 2}
d2 = {'b': 9, 'c':3}
d1.update(d2)
※key重複時は後者(d2)の値を反映
マージ(2) l1 = ['a','b','c']
l2 = ['d', 'e', 'f']
l1 +=l2
# これは結果が異なる
l1 = ['a','b']
l2 = ['c', 'd']
l1.append(l2)
--> ['a', 'b', ['c', 'd']]
t1 = (1, 2, 3)
t2 = (4, 5, 6)
t3 = t1 + t2
s1 = {1, 2, 3}
s2 = {4, 5, 6}
s3 = s1 | s2
-
特定の値を持つ要素の数を取得 l1.count('a') t1.count('a') - d1 = {'a': 3, 'b': 2, 'c': 1, 'd': 3}
len({k: v for k, v in d1.items() if v == 3})
---
sum(v == 3 for v in d1.values())
ソート
(破壊的)
l1.sort()
l1.sort(reverse=True)
- - -
ソート
(非破壊的)
l2 = sorted(l1) # sorted()=>list
t2 = tuple(sorted(t1))
# sorted()=>list
s2 = set(sorted(s1))
# 用途??
d2 = sorted(d1.items(), key=lambda x: x[1])
並び順を逆に
(破壊的)
l1.reverse() - - -
並び順を逆に
(非破壊的)
l2 = reversed(l1)
l2 = l1[::-1]
t2 = tuple(reversed(t1))
t2 = t1[::-1]
- -
コピー(浅い) a = [1, 2, 3]
b=a
a = (1, 2, 3)
b = a
---
import copy
a = (1, 2, 3)
b = copy.copy(a)
a = {1, 2, 3}
b = a
a = {'a': 1, 'b': 2, 'c': 3}
b = a
コピー(深い) a = [1, 2, 3]
b = a.copy()
---
c = list(a)
---
d = a[:]
import copy
a = (1, 2, 3)
b = copy.deepcopy(a)
---
c = tuple(a)
---
d = a[:]
a = {1, 2, 3}
b = a.copy()
---
c = set(a)
a = {'a': 1, 'b': 2, 'c': 3}
b = a.copy()
値の合計 sum(l1) listと同じ listと同じ sum(d1.keys())
sum(d1.values())
値の最大 max(l1) listと同じ listと同じ max(d1.keys())
max(d1.values())
値の最小 min(l1) listと同じ listと同じ min(d1.keys())
min(d1.values())
変換(Stringへ) l1 = ['a', 'b', 'c']
','.join(l1)
--> a,b,c
listと同じ listと同じ ','.join(d1.keys()) >
','.join(d1.values())
変換(Listへ) - list(t1) list(s1) list(d1.keys())
list(d1.values())
変換(Tupleへ) tuple(l1) - tuple(s1) tuple(d1.keys())
tuple(d1.values())
tuple(d1.items())
変換(Setへ) set(l1) set(t1) - set(d1.keys())
set(d1.values())
set(d1.items())
変換(Dictへ) l1 = [['a', 'b'], ['c', 'd'], ['e', 'f']]
d1 = dict(l1)
---
k = ['a', 'b', 'c']
v = [1, 2, 3]
d1 = dict(zip(k, v))
t1 = (('a', 'b'), ('c', 'd'), ('e', 'f'))
d1 = dict(t1)
s1 = {('a',1),('b',2),('c', 3)}
d1 = dict(s1))
---
s1 = {'a', 'b', 'c'}
s2 = {1, 2, 3}
d1 = dict(zip(s1, s2))
-
複数のシーケンスから
順番に取り出し
zip(l1,l2) listと同じ zip(s1,s2)は可能だが
組や順番は未保証
s1 = {'a', 'b', 'c'}
s2 = {1, 2, 3}
l3 = zip(s1, s2)
--> {('a', 1), ('c', 3), ('b', 2)}
-
内包表記 [x for x in l1] tuple(x for x in t1) {x for x in s1} {k: v for k, v in d1.items()}
mutableな
オブジェクトの格納
可能
l1 =['a', [1, 2, 3]]
可能
t1 = ('a', [1, 2, 3])
不可
s1 = {'a', [1, 2, 3]}
-->TypeError
Keyは不可(Type Error)
d1 = {[1, 2, 3]: 1}
Valueは可能
d1 = {'a': [1, 2, 3]}
集合演算(和) - - s1 | s2
s1.union(s2)
-
集合演算(差) - - s1 - s2
s1.difference(s2)
-
集合演算(積) - - s1 & s2
s1.intersection(s2)
-
集合演算(対象差) - - s1 ^ s2>
s1.symmetric_
difference(s2)
-
キーによる参照 - - - #キーが無いとKeyError発生
d1[key]
#無いとNoneが返る
d1.get(key)
#無いとdefaultが返る
d1.get(key,default)
キーの取得とループ - - - d1.keys()
for key in d1.keys():
値の取得とループ - - - d1.values()
for val in d1.values():
キー&値ペアの
取得とループ
- - - # ( k, v )のペアがtupleで戻る
d1.items()
for key, value in d1.items():
キーと値の入れ替え - - - d2 = {v: k for k, v in d1.items()}
91
92
6

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
91
92

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?