文字列と、共通のデータ構造
文字列を使用します
私たちは、文字列の使用を理解するために、次のコードを使用することができます。
もし__name__ == '__main__':
メイン()
文字列に加えて、Pythonはまた、データ構造の種類を複数構築し、操作は、プログラムにデータを保存する場合は、ほとんどの時間は、最も一般的に使用される、タプル、設定のリストを含め、達成するために、既存のデータ構造を使用することができ、かつ辞書。
リストを使用します
次のコードは、リストを定義する要素のリストにアクセスするだけでなく、要素を追加および削除するためにインデックスを使用する方法を示しています。
メインDEF():
[1 ,. 3 ,. 5 ,. 7、100]のList1 =
プリント(リスト1)
。LIST2 = [ 'ハロー'] 5 *
プリント(LIST2)
#計算リストの長さ(要素の数)
を印刷(LEN(リスト1) )
#添え字(インデックス)計算
プリント(List1を[0])
を印刷(リスト1)[4] #
プリント(リスト1)#はIndexError [5]:OUTリスト範囲のインデックス
印刷(List1を[-1])
プリント(リスト1 [ -3])
のList1 [2] = 300
プリント(リスト1)
#1添加元素
list1.append(200)である
)、1。list1.insert(400
のList1 + = [1000、2000]
プリント(リスト1)
)プリント(LEN(リスト1)
#要素を削除
list1.removeを(3)
のList1で1234 IF:
list1.remove(1234)
LIST1デル[0]
印刷(LIST1)
#空のリスト要素
List1.Clear()
プリント(LIST1)
もし__name__ == '__main__':
メイン()
そして、文字列、操作を行うことができるスライスリストのように、我々は、操作をスライスしたり、新しいリスト、以下のコードを作成するために、リストの一部から取り出したことにより、コピーリストを達成することができます。
DEFメイン():
[ 'Waxberryで' 'ブドウ'、 'アップル'、 'ストロベリー']果物=
果物+ = [ 'ピタヤ'、 'PEAR'、 'マンゴー']
#は、要素のリストをループ
果物果物のための:
印刷(fruit.title()、終了= '')
を印刷()
#リストのスライス
fruits2フルーツ= [1:4]
印刷(fruits2)
## fruit3 =果物だけでなく、参照用のリストの新しいコピーを作成
#は、スライスを完了することができますリストコピーする操作
[:] fruits3フルーツ=
プリント(fruits3)
fruits4 =フルーツ[-3:-1]
プリント(fruits4)
#リストはスライス反転コピー反転させることにより得ることができる
fruits5 =果物[:: - 。1]
印刷(fruits5)
もし__name__ == '__main__':
メイン()
次のコードは、リスト上のソート操作を実装しています。
メインDEF():
List1を= [「オレンジ」、「アップル」、「動物園」、「国際化」、「ブルーベリーは」]
ソート=(List1を)LIST2
コピー#は関数は、リストが着信を変更しないリストをソート返すソート
関数の機能はできるだけ副作用をもたらすべきではないような設計#ソート
LIST3 =ソート(List1を、リバース= TRUE)
#は、キーワードパラメータ文字列の長さに応じてではなく、デフォルトのアルファベットのキーによって、ソート順を指定した
ソート= list4(リスト1 、キー= LEN)
印刷(List1を)
印刷(LIST2)
を印刷(LIST3)
印刷(list4)
オブジェクトのソートされたリストに送られた#メッセージは直接上のオブジェクトのリストをソート
list1.sort(リバース= TRUE)
印刷(List1を)
もし__name__ == '__main__':
メイン()
我々はまた、リスト、以下のコードを作成するための構文を生成するために、リストを使用することができます。
インポートSYS
DEFメイン():
F = [(1、10)の範囲内のXのX]
印刷(F)
F = [X + Y XのためのYのための'ABCDE'の'1234567'に】
プリント(F)
と#船舶用のリストを作成するには、リストを生成するための表現の構文
要素のリストを作成するには、この構文を使用した後#は準備ができているので、より多くのメモリ空間をとる
= fは[X - ** X-2の範囲内のために(1、1000)]
印刷(SYS。 getsizeofは、(F))#は、オブジェクトによって占有メモリのバイト数を表示し
印刷(f)の
リストではありませんが、ジェネレータオブジェクト#は次のコードが作成されますのでご注意くださいを
#は、データ発生器に取得することができますが、それは余分なスペースを取りません。データ格納
位にデータが内部演算によって得られたデータに必要とされるたびに(それは余分な時間を要する)
F =(範囲におけるXのX 2 **(1、1000))
プリント(sys.getsizeof(F))#比較式ビルダーは、データ格納用のスペースを占有しない
印刷(F)を
Fにヴァルのために:
印刷(ヴァル)
__name__ ==「__main__」の場合:
メイン()
上記の構文を生成することに加えて、Pythonは、ジェネレータを定義する別の方法があり、共通のファンクションジェネレータ関数に変換収率キーワードによるものです。次のコードは、世代ジェネレータFeibolaqieシーケンスを実装する方法を示します。Feibolaqieは、次の再帰的方法で定義された列の数と呼ばれてもよいです。
$$ {\ displaystyle F_ {0} = 0} $$
$$ {\ displaystyle F_ {1} = 1} $$
$$ {\ displaystyle F {N} = F {N-1} + F_ {N-2}}({N} \ GEQ {2})$$
DEF(N)FIB:
B = 0、1
レンジ(N)で_用:
B = B、A + Bを
得た
(DEF主に):
FIBにヴァル(20)のために:
プリント(val)で
あれば__name__ == '__main__':
メイン()
タプル
Pythonのタプルはタプルの要素は、我々はタプルを複数回使用しました前のコードに変更することができないことを除いて、リストに似ています。名前が示すように、我々はタプルを形成するために一緒に結合し、複数の要素を持っているので、データのリストとして保存することができます。次のコードは、タプルを定義して使用する方法を示します。
:DEFメイン()
#タプル定義
T =(真、 '羅ハオを' 38 '成都')
印刷(T)
位取得タプル
プリント(T [0])
を印刷(Tの[3] )
#横断タプル値
Tのメンバーのために:
プリント(会員)
バックタプル割り当てに#
#1 T [0] =「キングハンマー」#はTypeErrorの
#変数tは、元のタプルがされる新しいタプルに戻って参照しますガベージコレクションの
T =(「キングハンマー」、20、真の、「昆明」)
印刷(T)
リストする#コンバートタプル
人を=リスト(T)
を印刷(人)
#リストには、その要素を変更することができます
[人を0] = 'ブルース・リーの
人[1] = 25
印刷(人)
#タプルのリストに変換
fruits_list = [ 'りんご'、 'バナナ'、 'オレンジ']
fruits_tuple =タプル(fruits_list)
印刷(fruits_tuple)
の場合__name__ == '__main__':
メイン()
ここでの質問は、私たちがなぜ我々は、このようなタプルがそれをタイプ必要なのです、このようなデータ構造のリストを持って探検する価値がありますか?
1組の要素は、実際には、我々特にマルチスレッド環境は(後述する)、修正することができません使用することを好むかもしれない状態がプロジェクトで変更することができないので、それらの不変オブジェクト(一方のオブジェクトであるため、一方、誰のスレッドが、同じオブジェクトの内部状態を変更しないことができないので、このようにして引き起こされる不要な手続きエラーを回避するため、単に変数ターゲットオブジェクト簡単より一定に維持することを意味あなたが同期のオーバーヘッドを処理して保存することができますので、変数のオブジェクトは、自動的にスレッドセーフです。一定のオブジェクトを簡単にアクセスを共有することができます)。だから、結論はこれです:要素が変更、追加、削除する必要がない場合、彼らはタプルが良い選択で使用し、この方法は、複数の値を返すようにすれば、当然のことながら、タプルの使用を検討することができます。
コレクションを使用
Pythonはそれが重複する要素を許可していませんが、交差点、労働組合、違いや他の操作をすることができ、数学のセットを持つコレクションが同じです。
DEFメイン():
{1,2 ,. 3 ,. 3 ,. 3、2} SETL =
プリント(SETL)
プリント( '長さ='、LEN(SETL))
SET2 = SET(範囲(1、10)。)
プリント(SET2 )
(4)set1.add
(5)set1.add
set2.update([11、12である])
プリント(SETL)
プリント(SET2)
set2.discard(5)
#削除要素でない場合、本はKeyError例外につながる
IF 4にSET2:
(4)set2.remove
印刷(SET2)
回収容器を通る#
SET2内のelemについて:
印刷(2 ** elemは、エンド= '')
を印刷()
#はタプルの集合に変換され、
SET3 =セット((1、 2 ,. 3 ,. 3,2 ,. 1))
プリント(set3.pop())
プリント(SET3)
#セット交差点と組合、差、対称差分演算
印刷(SET1&SET2)
#印刷(set1.intersection(SET2))
プリント(SET1 | SET2)
#印刷(set1.union(SET2))
プリント(SET1 - SET2)
#印刷(set1.difference(SET2))
プリント( SET1 ^ SET2)
#プリント(set1.symmetric_difference(SET2))
#判断子集和超集
プリント(SET2 <= SET1)#
プリント(set2.issubset(SET1))
プリント(SET3 <= SET1)
#プリント(SET3。 issubset(SET1))
プリント(SET1> = SET2)
#プリント(set1.issuperset(SET2))
プリント(SET1> = SET3)
#プリント(set1.issuperset(SET3))
なら__name__ == '__main__':
メイン()
説明:Pythonはカスタムオペレータにいくつかの特別な方法で許可は、呼び出すことができる上記のコードは、我々は、オブジェクトのセットを計算するための一連のメソッド特定のタイプまたはデータ構造の(後の章に言及されます)直接作用の方法に対応するオペレータ、オペレータ&例えば交差点が同じで使用するが、演算子を使用することができ、コードをより直感的にします。
辞書を使用してください
辞書は、私たちの生活の中で使用された辞書に似た別の変数コンテナモデル、である、それはオブジェクトの任意のタイプ、および異なるセットのリストを格納することができ、辞書の各要素はキーと "の値で構成されていますコロンで区切られたキーと値のペア「キーと値。次のコードは、辞書を定義し、使用する方法を示します。
DEFメイン():
スコア= {「羅ハオ」:95「Baiyuan牙」:78「DiRenJie」:82}
#キーを介して対応する辞書の値を取得することができる
プリント(スコア[「羅ハオ」])
印刷(スコア[ 'DiRenJie'])
#辞書トラバーサル(トラバーサルキーと、キーは、実際に)対応する値によって取られる
スコアのELEMため:
プリント( '%S \ T ---> \ T D%' %(ELEM、スコア[ELEM]))
辞書更新#1の要素
スコア[ 'Baiyuan牙'] = 65の
スコア[ '諸葛はwanglang'] = 71である
(コールド= 67、85 Fangqi彼=)scores.update
プリント(スコア)
IF '呉'でスコア:
プリント(スコア[「ウー」])
、印刷(scores.get(「ウー」))
#GETメソッドは、キー値に対応する値によって得られるが、デフォルト設定することができる
プリント(scores.get(「ウー」、60) )
#要素辞書除去
プリント(スコア。popitem())
プリント(scores.popitem())
印刷(scores.pop( '羅ハオ'、100))
#空の辞書
scores.clear()
印刷(スコア)
__name__ == '__main__' IF:
メイン()