python学習ノートシーケンス
4309 ワード
組み込みシーケンス容器シーケンス list, tuple, collections.dequeなどのシーケンスは異なるタイプのデータを格納できますフラットシーケンス str, byte, bytearray, memoryview, array.array、これらのシーケンスには1つのタイプのデータしか収容できません.
以上、コンテナシーケンスは、任意のタイプのオブジェクトを含む参照を格納し、フラットシーケンスは参照ではなく値を格納します.
リスト(list)は最も基本的で最も重要なシーケンスタイプです.
リストの導出
リストはforループ変換によって導出され,可読性が向上するとともにコードがより簡潔になる
pythonは、コード内の[]/()/{}内の改行を無視します.ここでは、継続文字""を省略できます.
ジェネレータ式
ジェネレータの構文とリストの導出の差は多くなく、角カッコを丸カッコに変えるだけです.
(1)ジェネレータ式が関数固有のパラメータである場合、このパラメータは余分なカッコ(2)arrayの構造方法で2つのパラメータを必要としないため、ジェネレータ式はカッコで囲まれる必要がある
list.sortメソッドと内蔵関数sorted list.sortメソッドの機能は、シーケンスをその場でソートすることです.すなわち、配列を再作成することなく、元の配列を にコピーします.とlist.sortとは異なり、シーケンスの内蔵関数sortedの機能もソートされますが、元の配列に変更はありません.
以上の例から両者の差が分かるが,sorted関数はkey,reverseの2つのパラメータを受け入れ,パラメータkeyは比較の基準を表し,reverseは逆シーケンスを表すかどうか(True)を表す.
bisectによる秩序化シーケンスの管理
bisectによる検索
関数bisect(haystack,needle)は、haystack(干し草の山、秩序あるシーケンス)の中でneedle(針)の位置を見つけることができ、この位置が満たす条件は、needleを関数が検索した位置に挿入した後もhaystack全体が秩序を保つことである.
*bisectは実はbisect_rihght関数の略で、元のシーケンスが挿入された要素と等しい要素の位置の右側を返します.この関数には姉妹関数bisect_があります.left、元のシーケンスが挿入された要素と等しい要素の位置の左側を返す挿入位置
本には、pythonの動作原理を可視化分析するツールであるPython Tutorのウェブサイトも推奨されています.
注:以上の内容の主体はすべて《流暢なpython》の本の中の第2章のシーケンスの構成の配列から来ます
以上、コンテナシーケンスは、任意のタイプのオブジェクトを含む参照を格納し、フラットシーケンスは参照ではなく値を格納します.
リスト(list)は最も基本的で最も重要なシーケンスタイプです.
リストの導出
>>> symbols = ' '
>>> codes = [ord(symbol) for symbol in symbols]
>>> codes
[20013, 21326, 20154, 27665, 20849, 21644, 22269]
リストはforループ変換によって導出され,可読性が向上するとともにコードがより簡潔になる
pythonは、コード内の[]/()/{}内の改行を無視します.ここでは、継続文字""を省略できます.
ジェネレータ式
ジェネレータの構文とリストの導出の差は多くなく、角カッコを丸カッコに変えるだけです.
>>> symbols = ' '
>>> tuple(ord(symbol) for symbol in symbols)
(20013, 21326, 20154, 27665, 20849, 21644, 22269)
>>> import array
>>> array.array('I', (ord(symbol) for symbol in symbols))
array('I', [20013, 21326, 20154, 27665, 20849, 21644, 22269])
(1)ジェネレータ式が関数固有のパラメータである場合、このパラメータは余分なカッコ(2)arrayの構造方法で2つのパラメータを必要としないため、ジェネレータ式はカッコで囲まれる必要がある
list.sortメソッドと内蔵関数sorted
>>> fruits = ['grape', 'respberry', 'apple', 'banana']
>>> sorted(fruits)
['apple', 'banana', 'grape', 'respberry']
>>> fruits
['grape', 'respberry', 'apple', 'banana']
>>> sorted(fruits, key=len)
['grape', 'apple', 'banana', 'respberry']
>>> sorted(fruits, key=len, reverse=True)
['respberry', 'banana', 'grape', 'apple']
>>> fruits
['grape', 'respberry', 'apple', 'banana']
>>> fruits.sort()
>>> fruits
['apple', 'banana', 'grape', 'respberry']
以上の例から両者の差が分かるが,sorted関数はkey,reverseの2つのパラメータを受け入れ,パラメータkeyは比較の基準を表し,reverseは逆シーケンスを表すかどうか(True)を表す.
bisectによる秩序化シーケンスの管理
bisectによる検索
関数bisect(haystack,needle)は、haystack(干し草の山、秩序あるシーケンス)の中でneedle(針)の位置を見つけることができ、この位置が満たす条件は、needleを関数が検索した位置に挿入した後もhaystack全体が秩序を保つことである.
import bisect
import sys
import random
haystack = [1, 4, 5, 6, 8, 12, 15, 20, 21, 23, 23, 26, 29, 30]
needles = [0, 1, 2, 5, 8, 10, 22, 23, 29, 30, 31]
row_fmt = '{0:2d} @ {1:2d} {2}{0:<2d}'
def demo(bisect_fn):
for needle in reversed(needles):
position = bisect_fn(haystack, needle)
offset = position * ' |'
print(row_fmt.format(needle, position, offset))
if __name__ == '__main__':
if sys.argv[-1] == 'left':
bisect_fn = bisect.bisect_left
else:
bisect_fn = bisect.bisect_right
print('Demo: ', bisect_fn.__name__)
print('haystack ->', ''.join('%2d' % n for n in haystack))
demo(bisect_fn)
print("
#################insort###############")
size = 7
# random.seed(1729)
my_list = []
for i in range(7):
new_item = random.randrange(size * 2)
bisect.insort(my_list, new_item)
print('%2d ->' % new_item, my_list)
############# ################
Demo: bisect_right
haystack -> 1 4 5 6 8121520212323262930
31 @ 14 | | | | | | | | | | | | | |31
30 @ 14 | | | | | | | | | | | | | |30
29 @ 13 | | | | | | | | | | | | |29
23 @ 11 | | | | | | | | | | |23
22 @ 9 | | | | | | | | |22
10 @ 5 | | | | |10
8 @ 5 | | | | |8
5 @ 3 | | |5
2 @ 1 |2
1 @ 1 |1
0 @ 0 0
#################insort###############
9 -> [9]
7 -> [7, 9]
1 -> [1, 7, 9]
4 -> [1, 4, 7, 9]
5 -> [1, 4, 5, 7, 9]
12 -> [1, 4, 5, 7, 9, 12]
5 -> [1, 4, 5, 5, 7, 9, 12]
*bisectは実はbisect_rihght関数の略で、元のシーケンスが挿入された要素と等しい要素の位置の右側を返します.この関数には姉妹関数bisect_があります.left、元のシーケンスが挿入された要素と等しい要素の位置の左側を返す挿入位置
本には、pythonの動作原理を可視化分析するツールであるPython Tutorのウェブサイトも推奨されています.
注:以上の内容の主体はすべて《流暢なpython》の本の中の第2章のシーケンスの構成の配列から来ます