IPython
Shell命令
!command 執行shell命令
!ls -l , !touch a.txt file = !ls -l | grep py
魔術方法
使用%開頭的,IPython內置的特殊方法
%magic 格式
%開頭是line magic
%% 開頭是cell magic,notebook的cell
%alias 定義一個系統命令的別名
alias ll ls -l
%timeit statement
-n ?一個循環loop執行語句多少次
-r ?循環執行多少吃loop,取最好的結果
%%timeit setup——code
封裝和結構
封裝
將多個值用逗號分割,組合在一起
本質,返回一個元組,只是省略了小括號
Python特有語法,被很多語言學習借鑒
t1 = (1,2)#定義元組
t1 = 1,2 將1和2封裝成元組
Type(t1)
Type(t2)
舉例:a = 4 ???b = 5 ?
temp = a ?a = b b = tmp
a , b = b , a
右邊使用了封裝,左邊使用了解構
解構
把線性的結構元素解開,并順序的賦給其他變量
左邊接納的數量要和右邊解開的元素個數一致
舉例:
lst = [3,5]
First,second = lst
Print(first,second)
Python3的解構
使用*變量名接收 ,但不能單獨使用
被*變量名 收集后組成一個列表
head,*mid,tail = “asdfghjkl”
丟棄變量
這是一個慣例,是一個不成文的約定,不是標準
如果不關心一個變量,就可以定義為改變量的名字
_是一個合法的標識符,也可以作為一個有效的變量使用,但是定義成_就是不要使用,除非你明確的知道這個數據需要使用
舉例:
lst = [9,8,7,20]
Frist,*second = lst
Head,*_,tail = lst
Print(head,tail)
#_是合法的標識符,看到下滑線就知道這個變量就是不想被使用
例子:aa = [1,[2,3,4],5]
_,bb,_,=aa
_,_,cc=bb
cc
例子
lst = [1,[2,3,4],5]
a,(b,c,d),e = lst
print(a,b,c,e)
_,(*_,val),*_ = lst
print(val)
例子
key,_,val = “JAVA_HOME=/usr/bin”.partition(“=”)
print(key)
print(val)
集set
約定:set翻譯為集合。collection翻譯為集合類型,是一個大概念
可變的,無序的,不重復的元素集合
set{} ?—-> ?字典 ?set() 集合
Set的元素
Set的元素要求必須可以hash
目前學過的不可hash的類型有lsit,set
元素不可索引
Set可以迭代
Set增加
add(elem)
增加一個元素到set中
如果一個元素存在,什么都不做
Update(*others)
合并其他元素到set集合中來
參數others必須是可迭代對象
就地修改(數字分開)
Remove(elem)
從set中移除一個元素
元素不存在,就拋出keyerror異常
Discard(elem)
從set中移除一個元素
元素不存在,什么都不做
Pop() —> item
移除并返回任意的元素
空集返回keyerror異常
Clear()
移除所有元素
Set修改查詢
修改
要么刪除,要么加入新的元素
查詢
非線性結構,無法索引
遍歷
可以迭代所有元素
成員運算符
In 和 not in判斷元素否在set中
Set和線性結構
線性結構的查詢時間復雜度是O(n),即隨著數據規模的增而增加耗時
Set,dict等結構,內部使用hash值作為key,時間復雜可以做到O(1),查詢時間和數據規模無關
可hash:數值型int,float,complex
布爾型True ,False
字符串string,bytes
Tuple ??None
以上都是不可變類型,成為可hash類型,hashable
集合
基本概念
全集:所有元素的集合。例如實數數列,所有實數組成的集合就是全集
子集subset和超集superset:一個集合A所有的元素都在另一個集合B內。A就是B的子集,B是A的超集
真子集和真超集:A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集
并集:多個集合合并的結果
交集:多個集合的公共部分
差集:集合中除去其他集合的公共部分
Union(*other):多個集合合并后的新的集合
| 運算符重載等同于union
Update(*others):多個集合合并就地修改
|= 等同update
交集:AB集合的公共部分
Intersection(*others):返回和多個集合的交集
& :等同于intersection
Intersection_update(*others):獲取多個集合的交集 就地修改
&= ?等同于Intersection_update
差集:集合A和B,有所有屬于A且不屬于B的元素組成的集合
Difference(*others):返回多個集合的差集
一:等同于difference
Difference_update(*others):-=:獲取和多個集合的差集并就地修改
集合運算
對稱差集:集合A和B,有所有不屬于A和B的交集元素組成的集合記做(A-B)U B-A(
Symmetric_difference(others):返回和另一個集合的差集:^
Symmetri_difference_update(others):獲取和另一個集合的差集并就地修改
^= 等同于symmetri_difference_update
例子
a = {‘A’,’B’,’C’} ?#我的好友
b = {‘C’,’B’,’D’} ?#他的好友
a & b
?
a = {1,2,3,4} ?#群里
b = {4} ???????#我
a & b
?
a = {‘A,B,C’} ??#權限
b = {‘C,B,D’} ??#我有的權限
a & b == a
?
a = {‘A’,’B’,’C’,’D’,’E’} ??#總任務
b = {‘A’,’B’,’C’} ?????????#已經完成
a – b
?
#隨機產生2組10個數字的列表,
#每個數字取值范圍[10,20]
#一共有多少個不同的數字
#不重復的數字有幾個
#重復的數字有幾個
(1)import random
lst = set()
lat = set()
for i in range(10):
????a=random.randint(10,20)
????lst.add(str(a))
????b=random.randint(10,20)
????lat.add(str(b))
print(len(lst.union(lat)))
print(len(lst.symmetric_difference(lat)),(lst.symmetric_difference(lat)))
print(len(lst.intersection(lat)),(lst.intersection(lat)))
(2)a = [1,9,7,5,6,7,8,8,2,6]
b = [1,9,0,5,6,4,8,3,2,3]
s1 = set(a)
s2 = set(b)
print(s1)
print(s2)
print(s1.union(s2))
print(s1.symmetric_difference(s2))
print(s1.intersection(s2))
?
?
?
?
?
?
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/93901