07. 諸悪の根源-set 集まり、知識の深さだけでなく、いくつかの補足コピー
このセクションの内容:
- 基礎となるデータ・タイプのサプリメント
- セットコレクション
- コピー深さ
内容:
A.基本となるデータ型サプリメント
まず、int型とstr事前学習ではそう見て、それまでの残りの部分を所有する80%以上の話されています。私たちは、文字列の基本的な操作に補完します
リー= [ "李のKa"、 "ツイストつる"、 "黄海豊"、 "カリーナ"] S = "_" ジョイン(LI)
プリント(S)
李= "黄色の大きな女の子の女性の" S = "_"。(LI)印刷(複数可)に参加
列のリスト:
循環は、列のリストの各要素を削除します
リチウムの電子のためのLi = [11、22、33、44]。
li.remove(E)
印刷(LI)
結果:[22、44]
理由の分析:
プロセスのための行を実行します。現在のサイクルを記録するためのポインタがありますが、その後0番目の要素を取得0このポインタポイントの開始時に、その要素である。そして、最初の0。この時間は、最初に判明削除します自動的にポイント1つの要素、いったんポインタバックを移動最初0になるであろう。この場合、元の一方が0となっている要素は、それがアップ削除されません。
削除されたポップを使用してみてください:
= [11、22、33、44]
デルのLi [I]:Iの範囲内(0、lenの(LI))のために
印刷(LI)
結果:エラー
#I 1、= 0、2、削除された後のときのLi [0]を削除しました。最初のものは0となる背後。
#というように。私は2時間=とき。リストだけ一つの要素。しかし、これは2つの確かに与えられてああを削除するのは初めてです
分析は。トレッキングサイクルは削除されません。かどうかは、デルを使用するか、削除して。見つから実現することはできません。そして、それをポップ?
リーでエルのために: |
|
|
|
li.pop() |
#ポップもないOK |
印刷(LI) |
|
|
結果: |
|
|
[11、 |
22] |
|
|
|
|
この方法でのみことが可能です。
iが範囲(0、lenの(LI))にするため#サイクルがlen(LI)の時間は、その後)(フォワードli.popから削除します
印刷(LI)
または。列の別のリストで、削除したいものを記録する。その後、サイクルを削除
それ] [= [11、22、33、44] del_liを=
そして彼らのために:del_li.append(S)
そしてdel_li用:li.remove(S)
印刷(LI)
注:原因要素を削除する要素のインデックスの変化につながる可能な限り削除要素に直接金額をリサイクルしていないとして、それは問題に簡単に簡単ですが、コレクションのバルク量を削除するには、別の要素を追加してから削除することができます...
FROMKEYでdictの()は、リストで辞書を作成するために私たちを助けることができます
DIC = dict.fromkeys([ "ジェイ"、 "JJ"]、[ "ジェイ"、 "ツイストつる"])プリント(DIC)
結果:
{ 'ジェイ':[ 'ジェイ'、 'ツイストつる']、 'JJ':[ 'ジェイ'、 'ツイストつる']}
列リストの各項目の前には内容がdictのより良い注意を生成した値としてカラムリストの後ろに、鍵となるよう..:
DIC = dict.fromkeys([ "ジェイ"、 "JJ"]、[ "ジェイ"、 "ツイストつる"])プリント(DIC)
dic.get( "ジェイ")。APPEND( "胡大")プリント(DIC)
結果:
{ 'ジェイ':[ 'ジェイ'、 'ツイストつる'、 'フー']、 'JJ':[ 'ジェイ'、 'ツイストつる'、 'フー']}
ただ、多くのジェイの列リストそのコードを変更します。しかし、ジェイとJJの使用ので、同じ列リストに。フロントを変更したこと。フォローへの変更の後ろ
反復プロセスの要素をのdictは、行を削除することが許可されていません
DIC = { 'K1': 'アレックス'、 'K2': 'wusir'、 'S1': '古い金ボス'}
「K」の持つ#Deleteキー要素
DICにおけるkのための:
'K' におけるkの場合:
反復中デルDIC [K]#辞書変更サイズ、反復ループ
世代は、行の削除を許可していない時間ではありません
印刷(DIC)
それを行うにはどのように?要素がリストに保存される前に削除する、その後、サイクルリストが、その後、削除します
DIC = { 'K1': 'アレックス'、 'K2': 'wusir'、 'S1': '古い金ボス'} dic_del_list = []
DICにおけるkのための「K」の要素を持つで#Deleteキー:
Kの 'K' の場合:dic_del_list.append(K)
以下のためdic_del_listに:名前は[]
印刷(DIC)
型変換:
タプル=>列リストのリスト(タプル)
=コラム一覧>タプルタプル(リスト)
リスト=> STR str.join(リスト)STR =>リストstr.split()
偽のデータが変換されます。
0、 ''、なし、[]、()、{}、セット()==>偽
二つ。セットのコレクション
コレクションは、基本データ型のpythonのセットです。通常ではない非常に一般的。一連の要素が繰り返されていません。障害。要素はハッシュ(INT、STR、タプル、ブール値)でなければならない中で、我々はできます覚えておく。データのセットは、値を保存せずに型辞書であり、唯一のキーを保存する。また、{}で表さセット
注:セット、コレクション要素はハッシュでなければならない、ハッシュ自体が設定されていますが、利用できるセットは可変ではありません。
= {SETL、 'アレックス'、2、Trueを、[1,2,3] '1' } #1エラー= {SET2 'アレックス'、2、Trueを、{1' 1' :2}} #1エラー
= {SET3」1' 、 'アレックス'、2、Trueを、(1,2、[2,3,4])} #のエラー
要素の集合を繰り返し、乱れていません。
S = { "ジェイ"、 "チョウ"、 "周星"}プリント(S)
結果:
{「週スター」、「ジェイ」}
この機能を使用して、我々は、重複を削除するためにセットを使用することができます
リストに#重複除外
LST = [45、5、 "HA"、45、 'HA'、50]
LST =リスト(セット(LST))#セットにリストを変換し、リストプリント(LST)に戻す変換します
セットセットCRUD
1.増加
S = {「カリーナ '' ロザムンド」、 "WangZuXian "} s.add(" DOチェン")を
プリント(S)
s.add(「DOチェンは」)#重複したコンテンツは、セットは、印刷のセットに追加されていないではありません(S)
S = {「カリーナ '' ロザムンド」、 "WangZuXian "} s.update(" ツイストつる")#反復更新複数の印刷(S)
s.update([ "マギー"、 "カーマン・リー"、 "李カーマン"])プリント(S)
2. [削除]
S = {「カリーナ '' ロザムンド」、 "ジョイ・ウォン"、 "マギー"、 "李カーマン"}アイテム= s.pop()#ランダムポップ。(S)印刷
印刷(アイテム)
s.remove( "ロザムンド")#削除要素
#S.remove(「ずさんな痛み」)#この要素は存在しません。削除は、印刷(複数可)文句を言うでしょう
s.clear()空のセットの#セット。セットが空の場合(設定されているプリントアウト。そのセットに注意してください)とに起因して
辞書の区別。
プリント(S)#セット()
- 修正
#データ収集のセットがインデックス化されていません。要素を検索する方法はありませんので、直接ラインを変更する方法はありません。
#私たちは、変更操作を完了するために、最初の削除の仕方によって追加することができます
S = {「カリーナ '' ロザムンド」、 "ジョイ・ウォン"、 "マギー"、 "李Ruotong"}
#趙本山のs.removeにカリーナラウ(「カリーナ」)は(「趙」)プリント(単数または複数)をs.add
- お問い合わせ
#セットイテラブルがSでELの循環のための行を行うことが可能です:
印刷(エル)
- 共通操作
S1 = { "劉粲"、 "趙のSi"、 "ロングヒル用紙"}、S2 = { "劉Kechang"、 "萍郷張"、 "ロングヒル用紙"}
#交差点
#要素の2セットがあります。
プリント(S1およびS2)#{ '皮膚永山'}プリント(s1.intersection(S2))#{ '皮膚永山'}
#連合
印刷(S1 | S2) |
#{「劉Kechang」、「憑祥張」、「趙のSi」、「スキン長い山」、「缶劉」} |
|
印刷(s1.union(S2)) |
#{「劉Kechang」、「憑祥張」、「趙のSi」、「スキン長い山」、「缶劉」} |
|
#差分セット |
|
|
印刷(S1 - S2) |
単一の存在下で得られた#{「趙のSi」、「缶劉」} |
|
印刷(s1.difference(S2)) |
#{ '趙のSi'、 '缶劉'} |
|
#アンチ交差点 |
|
|
印刷(S1 ^ S2) |
二つの別々のデータセットの#存在{「萍郷張」、「劉粲」、「劉Kechang」、「趙のSi」} |
プリント(s1.symmetric_difference(S2))#{ '萍郷張'、 '劉粲'、 '劉Kechang'、 '趙のSi'}
S1 = { "劉粲"、 "趙のSi"}、S2 = { "劉粲"、 "趙のSi"、 "ロングヒル用紙"}
# 子集
印刷(S1 <S2)#SET1 SET2がそれのサブセットである?真印刷(s1.issubset(S2))
#スーパーセット
印刷(S1> S2)#SET1 SET2がそれのスーパーセットであるかどうかを検査し、印刷(s1.issuperset(S2))
コレクション自体は変更に設定されて起こることができる。ハッシュではありません。私たちは、データを保存するためのfrozensetを使用することができます。frozensetのは不変である。データ型のハッシュすなわち
S = frozensetの([ "趙"、 "劉粲"、 "皮膚長い山"、 "ニーリング"])
DIC = {S: '123'}#は、通常印刷(DIC)を使用することができ
これは非常に一般的ではありません。できることの理解
III。コピー深さ
LST1 = [ "ゴールデンライオン・キング"、 "ドラゴンパクリタキセル"、 "Baimeiyingwang"、 "Sowoskyバット"] LST2 = LST1
印刷(LST1)プリント(LST2)
lst1.append( "ヤンシャオ")プリント(LST1)プリント(LST2)
結果:
[ゴールドライオンキング「」ドラゴンパクリタキセル「」Baimeiyingwang「」Sowoskyコウモリ「」ヤンシャオ 『] [』ゴールドライオンキング「」ドラゴンパクリタキセル「」Baimeiyingwang " 「Sowoskyコウモリ」、「ヤンシャオ」]
dic1 = { "ID":123、 "名前": "谢逊"} dic2 = dic1
印刷(dic1)プリント(dic2)
dic1 [ '名前'] = "范瑶" 印刷(dic1)プリント(dic2)
結果:
{ 'ID':123、 '名称': '謝シュン'}
{ 'ID':123、 '名称': '謝シュン'}
{ 'ID':123、 '名称': 'ヴァン八尾'}
{ 'ID':123、 '名称': 'ヴァン八尾'}
リストについては、集合、辞書、直接割り当て事実は可変量のメモリアドレスである。その内容をコピーしない。LST1メモリとLST2ポイントは同じである。LST1変更は、LST2も発生します変更
シャローコピー
LST1 = [ "ギョンホ"、 "ドゥハイタオ"、 "ヴィック"] LST2 = lst1.copy()lst1.append( "李のKa")プリント(LST1)
プリント(LST2)プリント(ID(LST1)、ID(LST2))
結果:
LST 2全く異なる。メモリアドレスと内容と同じではないが実現にメモリコピーを発見されません
LST1 = [ "ヘ・ジオン"、 "ドゥシンセン、" "ヴィック"、[ "ねじれつる"、 "MAユン"、 "ビビ"] LST2 = lst1.copy()LST1 [3] .append(「無敵多摩孤独です「)プリント(LST1)
印刷(LST2)
プリント(ID(LST1 [3])、ID(LST2 [3]))
結果:
[「ヘ・ジオン、」「ドゥハイタオ」、「ヴィック」、[「ツイストつる」、「馬ユン」、「ビビ」、「無敵がより孤独研削される」]] [「ヘ・ジオン、」「ドゥハイタオ」、「ヴィック」、[ 「ツイストつる」、「馬ユン」、「ビビ」、「無敵がより孤独研削される」] 4417248328 4417248328
シャローコピー。第1層のみをコピーする。第二の層は、コンテンツをコピーしません。いわゆるシャローコピー
ディープコピー
インポートコピー
LST1 = [ "ヘ・ジオン"、 "ドゥシンセン、" "ヴィック"、[ "ねじれつる"、 "MAユン"、 "ビビ"] LST2 = copy.deepcopy(LST1)LST1 [3] .append(「無敵多摩あります孤独「)プリント(LST1)
印刷(LST2)
プリント(ID(LST1 [3])、ID(LST2 [3]))
結果:
[「ヘ・ジオン、」「ドゥハイタオ」、「ヴィック」、[「ツイストつる」、「馬ユン」、「ビビ」、「無敵がより孤独研削される」]] [「ヘ・ジオン、」「ドゥハイタオ」、「ヴィック」、[ 'ツイストつる'、 '馬ユン'、 'ビビ'] 4447221448 4447233800
ない同じ深さのコピー。要素内の要素は完全にラインのコピーをコピーします。別の質問への変更ではありません変更を
サプリメントの知識:
最後に、私たちは、顔の質問を見てみましょう。
= [1、2]、A [1] =プリント([1])
S =# "ABC"
#S1 = s.join( "コーラ")で"コーラ"に#の文字列
#印刷(S1)
("SB").join#S = "TX"
#を印刷(S)
#S = "_。"参加リストは、文字列になることができましょう([ "アレックス"、 "Wuse"、 "Taibai"、 "ritian"])#、リスト.splitに文字列()
印刷#(S)
#
#S = "SB" .join([ "王の栄光"、 "LOL"、 "カート"])
#印刷(S)
#Lstの= [富豪「「ドラゴン」トマト「」西へ」旅「私は、医学の神ではないよ」]
#lst.clear()
#リストは、サイクルの時点で削除することはできません。それは、インデックス変更されますので
、ELでのために#をLST:
#lst.remove(EL)#削除汚れたので、
#印刷(LST)
#del_lst = []
LSTでEL用#:
#1 del_lst.append(EL)あなたは、削除#コンテンツするレコード
#1
del_lstでEL用# :記録周期#の内容
#lst.remove(エル)は#元のコンテンツを削除
#印刷(LST)を
#LST = [ "ジェイ"、 "(チョウ・ユンファ)"、 "周星"、 "馬"、 "周Shuren"]
#削除されました男は情報から周を某
#del_lst = []
:LSTでのELのための#
#el.startswith IF( "週"):
#del_lst.append(EL)
#の
del_lstでEL用#:
#LST。削除(EL)
#プリント(LST)
#辞書サイズがサイクル時に変更することができない
。#DIC = { "": "123"、 "B": "456"}
DIC#におけるKの場合:
#dic.setdefault( "C"、 "123")の#のン与えられる
Aのdict.fromkeys =([ "JJ"、 'ジェイ'、 'Taibai']、 "SB")静的メソッド位、フロントキー、値が続く、反復が追加される
プリント(A)
DIC = { "A"は"123"}
フロント#キーにS = dic.fromkeys( "ミスター王"、 "クレストン")は、値を、続いて再帰さらに、新しい辞書に戻る
印刷(S)
#S =セット()#空のセット
#DIC = dictの()
#S = STR()
#I = INT()
#LST =リスト()
#印刷(I)
#= {S "王の栄光"、「リーグ""栄光の王」、123、真の、真}
#プリント(S)#重複排除、疾患
#S = {123、{1,2,3 }}# 有効でない、所与
#プリント(S)
#S = {123、(1,2,3)}#正当
#プリント(S)
#LST = [ "張強"、 "強"、 "レイ"、 "劉"、 "張"、 "張" "劉ヤン"、 "劉ヤン"]
#集合S =(LST)重複排除#の
#印刷(S)
#
##変更バック
#1 LST =リスト(S)
#印刷(LST)
#が凍結されたセットを設定します。ハッシュ可能A。不変
#S =のfrozenset([1、 3、6、6、9、8])# 缶重複排除。また、収集設定してもよいハッシュ。不変
#プリント(S)
#
#= {SS " 」、S}
#プリント(SS)
#LST1 = [「ライオン・キング」、「パクリタキセルドラゴンキング」、「Baimeiyingwang」、「緑の服に」]
## LST2 = LST1リスト代入操作、実際に割り当てたメモリアドレスへの参照です。メモリーこのとき、リストには2つの変数ポイントのリストだけ
#の
2の期間のための#1 lst2.append(「ヤンワーク」)#動作となるために行ってきました
#印刷(LST2)
#印刷(LST1)
#の浅いコピーコピー新しいオブジェクトを作成
#LST1 = [ "趙"、 "劉粲"、 "趙のSi"]
#LST2及びLST1が対象ではない## LST2 = lst1.copyを()
[:]#セクションが新たになります#LST2 = LST1オブジェクト
#1 lst1.append( "謝ビッグフット")
#印刷(LST1、LST2)
##(、上記ID(LST1)の上に、上記のID(LST2))を印刷
LST1 = [ "スーパーマン"、 "ドラゴンボール"、 "ひょうたん人形" 「山小屋ハンター」[「武」、「王」、「スラグスラグ明るさ」]
LST2 lst1.copy =()#コピー。第一層の浅いコピーコピー
LST1 [4] .append(「ビッグブラザーヤン」 )
、(LST1を印刷LST2)
プリント(ID(LST1))
プリント(ID(LST2))
#深拷贝
#インポートコピー
#LST1 = [ "スーパーマン"、 "ドラゴンボール"、 "ひょうたん人形"、 "ハンター山小屋" [ "金城武"、 "王"、 "スラグスラグ熙"]]
#= LST2 copy.deepcopy(LST1)#へLST1の深さは、コピーを含む、内部のすべての内容をコピーするためにスローされた
#1 LST1を[4] .append( "兄貴正")
#印刷(LST1、LST2)
#印刷(ID(LST1))
#印刷(ID(LST1) )
#なぜコピーの色合いがあるはず
速くオブジェクトを作成するプロセスよりも#コピー