一、set 集操作
-
set 翻譯為集合,collection翻譯為集合類型,是一個大概念
set 是可變的,無序的,不重復的元素的集合 -
set()? –>? 定義一個空集合>>> s4 = {}? ? ? ? ? ? ? ? ? ? ? 定義的是一個字典
>>> s4 = {9,10,11}? ? ? ? ? 定義的是一個 set
>>> s4 = {(1,2),10,’a’}? ? ? 定義的是一個 set
>>> s4 = {[1],(1),1}? ? ? ? ? 定義不成功,因為 list 是可變類型,不能哈希 -
set 元素的特性set 的元素要求必須可以 hash目前學過的不可 hash 的類型有 list、set元素不可以索引set 可以迭代
-
增加add(elem)? ? ? 增加一個元素到 set 中? ? ? 如果元素存在,什么都不做update(*others)? ? ? 合并其他元素到 set 集合中來? ? ? 參數 other 必須是可迭代對象? ? ? 就地修改
-
刪除remove(elem)? ? ? ?從 set 中移除一個元素? ? ? ?元素不存在,拋出 KeyError 異常?discard(elem)? ? ? ?從 set 中移除一個元素? ? ? ?元素不存在,什么都不做? pop()? –>? item? ? ? ? 移除并返回任意的元素? ? ? ? 空集返回 KeyError 異常? clear()? ? ? ? ?移除所有元素
-
修改、查詢? ? ?要么刪除,要么加入新的元素,因為不允許重復,如果能放進去,肯定不一樣,所以無法修改? ? ?非線性結構,因為無法索引,所以無法查詢? ? ?可以迭代所有元素
-
成員運算符的比較? ? in 和 not in 判斷元素是否在 set 中,效率極快,因為相當于先 hash 一下,根據索引來查找的,效率是 O(1)
-
集合運算? ?并集:A∪B,union(*others)? 等同于 |,即返回一個新的集合;update(*others) 等同于 |=,即就地修改? ?交集:A∩B,intersection(*others) 等同于 &,即返回一個新的集合;intersection_update(*others) 等同于 &=,即就地修改? ?差集:A-(A∩B),difference(*others) 等同于 – ,即返回一個新的集合;difference_update(*others) 等同于 -=,即就地修改? ? 對稱差集:(A-(A∩B)) +?(B-(A∩B)),symmetric_difference(other)? 等同于 ^,即返回一個新的集合;symmetric_difference_update(other)?等同于 ^=,即就地修改? ? ?issubset(other) 即 <=? ? ?isuperset(other) 即 >=? ? ?isdisjoin(other) 判斷當前集合和另一個集合沒有交集,如果沒有,則返回 True
二、封裝和解構
-
x,y = y,x? ?先把等號右邊的封裝起來組成一個元組,然后左邊再解構,賦予對應的值
-
解構? ?把線性結構的元素解開,并順序的賦給其它變量? ?左邊接納的變量數要和右邊解開的元素個數一致? ?使用 *變量名 接收,但不能單獨使用? ?被 *變量名 收集后組成一個列表? ? ? ? ? ? ? ??head,*mid,tail = “abcdefgh”? ? ? ? ? ? ? ? >>> mid? ?–>??[‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]? ? ? ? ? ? ? ? >>> type(mid)? –> list
-
丟棄變量? ? 這是一個慣例,是一個不成文的約定,不是標準? ? 如果不關心一個變量,就可以定義改變變量的名字為 _? ? _? 是一個合法的標識符,也可以作為一個有效的變量使用,但是定義成下劃線就是希望不要被使用,除非你明確知道這個數據需要使用? ? ?_ 這個變量本身無任何語義,沒有任何可讀性,所以不是用來給人使用的? ? ?Python 中很多庫,都使用這個變量,使用十分廣泛,請不要在不明確變量作用域的情況下,使用 _ 導致和庫中 _ 沖突
-
練習? 環境變量 JAVA_HOME = /usr/bin,返回環境變量名和路徑? first,*_,second = “JAVA_HOME=/usr/bin”.partition(“=”)? print(first)? print(second)
三、切片
- 支持負索引
- 超過上界(右邊界),就取到末尾;超過下界(左邊界),取到開頭
- start 一定要在 stop 的左邊
- [:] 表示從頭到尾,全部元素被取出,等效于 copy() 方法
- [start:stop:step]? ?step 要和 start:stop 同向,否則返回空序列
四、format函數
-
format 函數格式字符串語法:? ?“{} {×××}”.format(*args,**kwargs)? –> str? ?agrs 是位置參數,是一個元組? ?kwargs 是關鍵字參數,是一個字典? ?花括號表示占位符? ?{}表示按照順序匹配位置參數,{n}表示取位置參數索引為 n 的值? ?{×××} 表示在關鍵字參數中搜索名稱一致的? ?{{}} 表示打印花括號
-
位置參數:”{}:{}”.format(‘192.168.1.100’,8888),這就是按照位置順序用位置參數替換前面的格式字符串中的占位符關鍵字參數或命名參數:”{server} {1}:{0}”.format(8888,’192.168.1.100′,server=’Web Server Info:’),位置參數按照序號匹配,關鍵字參數按照名詞匹配訪問元素:”{0[0]}.{0[1]}”.format((‘magedu’,’com’))對象屬性訪問:? ? ? ?from collections import namedtuple? ? ? ?Point = namedtuple(‘Point’,’x y’)? ? ? ?p = Point(4,5)? ? ? ?“{{{0.x},{0.y}}}”.format(p)
-
對齊?‘{0}*{1}={2}’.format(3,2,2*3)?‘{0}*{1}={2:<2}’.format(3,2,2*3)? ?左對齊? ‘{0}*{1}={2:>05}’.format(3,2,2*3)? 右對齊,且不夠的位置補 0? ‘{:*^30}’.format(‘centered’)? ?居中,且不夠的位置補 *
-
進制?>>> “int:{0:d}; hex:{0:x}; oct:{0:o}; bin:{0:b}”.format(42)?‘int:42; hex:2a; oct:52; bin:101010’? >>> “int:{0:d}; hex:{0:#x}; oct:{0:#o}; bin:{0:#b}”.format(42)? ?#的作用是會將不同類型的數據加上相應的前綴? ‘int:42; hex:0x2a; oct:0o52; bin:0b101010’
-
浮點數?>>> print(“{}”.format(3**0.5))?1.7320508075688772?>>> print(“{:g}”.format(3**0.5))? 1.73205? >>> print(“{:f}”.format(3**0.5))? 1.732051? >>> print(“{:10f}”.format(3**0.5))? ? 右對齊? 1.732051? >>> print(“{:2}”.format(102.231))? ? 寬度為2,本來數字寬度已超過2,此參數等于無效? 102.231? >>> print(“{:.2}”.format(3**0.5))? ? ?2個有效數字? 1.7? >>> print(“{:.2f}”.format(3**0.5))? ? 小數點后2位? 1.73? >>> print(“{:3.2f}”.format(3**0.5))? ? ?寬度為3,小數點后2位? ? ?1.73? ?>>> print(“{:3.3f}”.format(0.2745))? ??寬度為3,小數點后3位,因為精度的原因所以才超過寬度? ?0.275? ?>>> print(“{:3.3%}”.format(1/3))? ?33.333%
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/93839