shuzo-kino.hateblo.jp
で扱った書式指定ミニ言語の補足です。
上の記法に加えて、辞書型の変数を扱う方法があります。
実際のところ
辞書型を呼び出すには、"**"とアスタリスクを二個並べる必要あり。
dic = {'bar': 'yeah', 'foo': 123} "Welcome {bar}. Your ID is {foo:#08x}".format(**dic) #>> 'Welcome yeah. Your ID is 0x00007b'
shuzo-kino.hateblo.jp
で扱った書式指定ミニ言語の補足です。
上の記法に加えて、辞書型の変数を扱う方法があります。
辞書型を呼び出すには、"**"とアスタリスクを二個並べる必要あり。
dic = {'bar': 'yeah', 'foo': 123} "Welcome {bar}. Your ID is {foo:#08x}".format(**dic) #>> 'Welcome yeah. Your ID is 0x00007b'
知れば知るほど妙な挙動をするrange型。
今回は定義済みのrange型を切り貼りして使う方法を扱います。
lists = range(3, 9, 2)
ではここで、コロン記法を使ってみる事にしましょう。
すると……?
lists[:0] #>> range(3, 3, 2)
……なにやら、末端が変わったrange型が出てきましたね。
0番目の要素だけ返してきたようです。
それなら":1"でどうなるか……予想通りなら5が返ってくるはず
lists[:1] #>> range(3, 5, 2)
じゃあ、これをどう活かすかという話になってきますが
ざっと考えて、以下の様な用途が考えられます。
17 in lists[:1] #>> False 17 in lists #>> True
からの配列を作る際にも組み込み関数rangeが使えます。
lists = [[] for i in range(4)] #>> [[], [], [], []]
どれだけ意味があるか不明ですが、rangeの記法はそのままつかえます
lists = [[] for i in range(1,10,2)] #>> [[], [], [], [], []]
Pythonの組み込み関数rangeは開始地点からステップ数まで、色々設定できる便利関数です。
Rubyだと類似記法として以下の様なものがありますが……ステップまで一つの関数で面倒見てくれるのは一寸便利かも
Array(1999..2006)
まえの内容も以下のように書き換えられます。
これを使うか、サンドイッチ風を使うかはケースバイケースですね。
shuzo-kino.hateblo.jp
s = list(range(1999,2006)) #=> [1999, 2000, 2001, 2002, 2003, 2004, 2005] var = 2001 var in s #>> True
N個毎……といった記述も可能です。
1996年から今回のリオ五輪までの夏五輪開催年を出すのはこんな感じ
list(range(1996,2017,4)) #=> [1996, 2000, 2004, 2008, 2012, 2016]
Pythonでは範囲指定の記法が数学でやった通りの記法が使えます。
var = 6 2 < var < 10 #>> True
x = "foo".encode() #>> b'foo' x.decode() #>> 'foo'
直接バイナリ列を定義する事も可能
x = b"bar" #>> b'bar'
ascii文字以外をエンコードしようとすると、16進数の文字列になります。
扱いはasciiと同じ。
var = "ごりら".encode() #>> b'\xe3\x81\x94\xe3\x82\x8a\xe3\x82\x89' var.decode() #>> ごりら
Pythonのリスト型にはコロン記法という実に奇妙な記法があります。
今回はコレについて。
こんなデータがあったとします。
list(range(10)) # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
全部表示
l[::]
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
二番目から
l[2::] # => [2, 3, 4, 5, 6, 7, 8, 9]
二個だけ
l[:2:] # => [0, 1]
二個区切り
l[::2] # => [0, 2, 4, 6, 8]
二番目から八番目まで三個区切り
l[2:8:3] # => [2, 5]