1. 程式人生 > >Python——20%入門基礎知識總結

Python——20%入門基礎知識總結

輸入輸出

x = input("這裡可以寫提示資訊!") #輸入
print("這裡基本遵循C的輸出 %s" % x) #輸出
print('a','b','c') #輸出:a b c,遇到逗號輸出空格。
#要在一行寫多條語句,可以用分號分割
s = "rat"; t = "car"

註釋

#單行註釋
''' 多行註釋'''

list

#i表示下標,x表示元素,L表示列表[1, 2, 3]
#增
L.insert(i, x)	 #L.insert(0, 5)  輸出[5, 1, 2, 3]
L.append(x) #L.append(5) 輸出[1, 2, 3, 5]

#刪
L.pop(i)
#不寫i,預設末尾一個,L.pop(0) 輸出 [2, 3] L.remove(x) #L.remove(1) 輸出 [2, 3],注意,這裡只能刪除最先匹配的1,如果有兩個1,則依舊還剩一個。 L.clear() #清空列表 L[:] = [] #改 L[i] = x A[0],A[-1] = A[-1],A[0] #首尾數字交換 change = L original = L[ : ] #如果此處也賦值L,則修改change,original也會隨著改變,所以需要重新建立一個列表。 #查 L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]#[start : stop : step]
L.count(x) #輸出:x在L中的個數。 if x in L:#x是否在列表內 A[-1] #倒序訪問,輸出:9 L[:5]#同L[0:5],輸出:[0, 1, 2, 3, 4] L[-5:] #輸出:[5, 6, 7, 8, 9] L[1:5] #輸出[1, 2, 3, 4] L[::2] #輸出 [0, 2, 4, 6, 8] L[::-1] #倒序輸出[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] #初始化list A = [x for x in range(10)] #或者 A = list(range(10)) 輸出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
A = [0 for x in range(10)] #輸出:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] A = [x*x for x in range(10)] #輸出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] B = list('abcdef')#輸出:['a', 'b', 'c', 'd', 'e', 'f'] C = [x for x in range(1,10,2)] #輸出: [1, 3, 5, 7, 9] D = [x for x in A if x%2==0] #條件過濾表示式 E = [i*100+j*10+k for i in range(1,10) for j in range(0,10) for k in range(1,10) if i==k] #一般不要這麼寫,讓人看著累。 #另一種簡單的方法,但是會出現淺拷貝現象,參考https://www.cnblogs.com/btchenguang/archive/2012/01/30/2332479.html A = [[0]*10]#同樣達到上面的效果。輸出:[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] A = [[0]*10]*10 #建立二維陣列,但是在賦值時,A[0][0]=1,會將所有行的第一個數都設為1,*10的效果還在。 A = [([0]*10) for i in range(10)]#可以修改為如下形式 #合併多個list: one = [1, 2, 3] two = ['a', 'b', 'c'] three = one + two #輸出:[1, 2, 3, 'a', 'b', 'c'] one.extend(two)#輸出:[1, 2, 3, 'a', 'b', 'c'] #用途較廣的一種,可以插入任意位置 one[0 : 0] = two #輸出: ['a', 'b', 'c', 1, 2, 3] #刪除部分list three[3 : ] = [] #輸出[1, 2, 3] #注意部分!!! one = [];two = [1,2,3];one = two;two.clear()#請問one是多少? #one是空,注意這裡賦值要用 one = two[:] #函式: #將多維列表行變列,列變行 zip(*list[list])

dict

dict的第一個特點是查詢速度快,無論dict有10個元素還是10萬個元素,查詢速度都一樣。而list的查詢速度隨著元素增加而逐漸下降。
不過dict的查詢速度快不是沒有代價的,dict的缺點是佔用記憶體大,還會浪費很多內容,list正好相反,佔用記憶體小,但是查詢速度慢。
由於dict是按 key 查詢,所以,在一個dict中,key不能重複。dict的第二個特點就是儲存的key-value序對是沒有順序的!這和list不一樣

test = {'Alice':'21',
        'Bob':'22',
        'Clike':'23'}
#增
test['newName'] = 'newNum' #動態語言,直接寫


#刪
del dict['Bob'] #刪除某個鍵值
test.pop('Bob')  #輸出22,刪除這個鍵值
test.clear()  #清空字典

#改
test['Bob'] = 23 #直接改
d1 = {'Daul': 75} #檢查test是否有Daul,沒有則加入
if not 'Paul' in test:
    test.update(d1)
    
#查
test.keys()  #輸出:不是一個列表或者元組,只能看看,不能操作 dict_keys(['Alice', 'Bob', 'Clike'])
test.values() #輸出:dict_values(['21', '22', '23'])
test['Bob']  #輸出22,找不到報錯
test.get('Bob')  #輸出22,找不到返回空,不會報錯。
len(test) #輸出3

函式:
#返回一個字典,鍵為list的元素,值為元素個數,很好用。
dic = collections.Counter(list)

tuple

tuple一旦建立完畢,就不能修改了, 建立tuple和建立list唯一不同之處是用( )替代了[ ]。

 A= tuple(range(10)) #輸出: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
 B = tuple(x for x in range(1,10)) #輸出: (1, 2, 3, 4, 5, 6, 7, 8, 9)
 C = (a,) #只有一個元素要加逗號

set

set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷一個元素是否在set中速度很快。
set儲存的元素和dict的key類似,必須是不變物件,因此,任何可變物件是不能放入set中的。

#預設x是元素,i是下標
a = [1,'b','b',3,3,3,'d','d','d','d',5,5,5,5,5,'f','f','f','f','f','f',
7,7,7,7,7,7,7,'h','h','h','h','h','h','h','h',9,9,9,9,9,9,9,9,9,
'j','j','j','j','j','j','j','j','j','j',11,11,11,11,11,11,11,11,11,11,11]
#增
b = set()    #定義空集合
b.add(x)  #新增元素x
b.update(x)  #新增元素x

#刪
s.remove(x) #刪除x,不存在會報錯
s.discard(x) #刪除x,不存在不會報錯
s.pop() #隨機刪除一個元素,不接受引數
s.clear() #清空

#改
for x in set(a):    #去除重複的值
    b[a.count(x)] = x    #去重後做計數,把數量和值寫到字典b

for e in reversed(sorted(b.keys())[-10:]): 
    print e,':',b[e]   #排序列表鍵值並取後10個(數量最大的10個),翻轉後打印出數量與值。
    
#查
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
for x in s:
    print x[0],':',x[1]
s = set([1,2,3])

#集合操作
 a = set('abracadabra')
 b = set('alacazam')
 a - b #輸出:集合a中不包含b的元素
 a | b #輸出:並集
 a & b #輸出:交集
 a ^ b #輸出:不同時包含於a和b的元素
 #也可以使用函式
 set.intersection(a,b)#獲取a,b的交集
 a.intersection(b)
 a.union(b)#並集
 a.difference(b)#獲取差集a-b

str


#增
one = 'abc'
two = 'efg'
three = one + two = 'abcefg'
#列表轉字串
ls1 = ['a', 1, 'b', 2]
ls2 = [str(i) for i in ls1]
#輸出:['a', '1', 'b', '2']這一步必須,否則不能用下面的函式
ls3 = ''.join(ls2) #輸出:'a1b2',還有'/'.join(ls2),輸出'a/1/b/2'

#刪
#一先轉換為列表,修改完再轉回來,同上

#改
#字串不能更改,一般使用以下方式:
#切片,只能取,不能改
s='Hello World' 
s=s[:6] + 'Bital'  
 #用replace函式
s='abcdef'
s=s.replace('a','A')       
char = chr(num)#和下面相反
num = ord(char)#將字元轉換為它的ASCII碼

'hello python'.title()  #輸出 Hello Python
'HELLO PYTHON'.lower() #輸出 hello python
'hello python'.upper() #輸出 HELLO PYTHON



#查
s.find(x)#返回:x在字串中出現較低的位置
s.rfind(x)#返回:x在字串中出現較高的位置
'abcdef'.find('abc')   #find:找不到返回-1 、 而in函式返回bool值。
#類似的函式,index。找不到返回ValueError,適合用在try except語句中。
s.index(x, j)#從j以後的位置找,find也有此引數,返回:x在字串中出現較低的位置

#內建函式
'123456'.isdigit()     #判斷數字輸出 True
'12345 python'.isalnum()#判斷是否數字字母混合輸出 True
'abcdef'.isalpha()     #輸出 True
'hello python'.split() #輸出['hello', 'python'],中間可以為任意空格

#istitle(): 判定字串是否每一個單詞有且只有第一個字元是大寫。
#islower():是否全是小寫,返回bool
#isupper():是否全是大寫,返回bool
#title(): lower(),upper()實現上述功能。

#reversed函式:倒轉字串,返回一個地址
list(reversed(ls3)) #輸出 倒置的列表

#正則表達,挺多
import re
s = "abc 123"
li = re.findall("[a-z0-9]+", s)



python常用函式

函式




#sorted 排序函式
sorted(s)
#enumerate函式:可以輸出索引和值
for index, num in enumerate(L):
    print(index,num)
    
#isinstance函式:判斷x是不是字串
isinstance(x, str) 

#eval函式:輸出65280;將字串轉換為表示式,並輸出二進位制
str1 = '0xff00'
print (eval(str1))

#random函式:輸出函式返回數字 N ,N 為 a 到 b 之間的數字(a <= N <= b),包含 a 和 b。
import random
print(random.randint(a,b))

一、介紹

讀完python入門課程和後續課程後,覺得比較混亂,想整理一下自己的知識點。如果對你有幫助那再好不過。前面會給出程式碼,如果覺得看的懂可以直接跳過我給的解釋,如果覺得有疑問,後面的我會給出詳細的解釋

@python是動態語言,你會發現定義一個變數可以任意,甚至隨便賦值都可以。這和靜態語言嚴格申明變數型別有所不同,下面是一些關於兩種語言的摘要,靜態語言以Java為例。

靜態型別有利於工具做靜態分析,有利於效能優化,有利於程式碼可讀性
有些人總是拿完成同樣任務所用程式碼量來做比較,得出python優於java的結論,不得不說這是非常片面的觀點。java是有些囉嗦,不過ide能幫忙減少80%以上的鍵盤敲擊,同時靜態分析能幫忙解決80%以上的低階錯誤,程式碼提示能幫忙減少80%以上的查文件時間,至於強大的重構能力更是python望塵莫及的,所以只要是稍微大的專案,用java很可能比python開發速度更快。

越是複雜的專案,使用靜態語言可以利用編譯器更早的發現和避免問題。這並不是說動態語言並不能用於大型專案,但是在超過一定規模之後,動態語言輕便靈活的優勢就會被重構時的overhead給抵消掉。另一個原因是效能上的。同理,也不是動態語言寫不出高效的程式碼,而是你花在優化上的時間會更多,而團隊人多了水平難免參差不齊,不如靜態語言穩妥。

那靜態型別語言的優勢究竟是什麼呢?我認為就是執行效率非常高。所以但凡需要關注執行效能的地方就得用靜態型別語言。其他方面似乎沒有什麼特別的優勢。

@優雅,明確,簡單。適合開發系統工具和指令碼,網站。程式碼量最少,開發快,但執行較慢。不適合貼近硬體,遊戲適合用C要用到渲染等技術,ios和Android都有自己的語言。

@python2.7版本和3.X版本不相容,用的早的程式大多是2.7,但是2020後,2.7就不在用了,主要用於維護。所以現在開始學習的可以學3.X。雖然上面那個課程是2.7版本的。

本書把大一點的Python指令碼稱為程式,簡單的Python稱為指令碼。

@跨平臺,幾個系統下都能執行。

@Python的優點是具有強大的模組功能。

@Python直譯器會將.py檔案編譯為.pyc位元組碼檔案,再編譯為.pyo檔案計算機可以識別。

@命名規則:
模組名,就是檔名,用小寫加下劃線的形式。lower_with_under
類名:Pascal風格,CapWords
Functions: 小駝峰命名,myFirstName

@安裝python很簡單,到官網下載下一步安裝,記住安裝路徑,一般不要安裝到C盤,除非你的C盤很大。可以在DOS窗口裡檢視

DOS視窗輸入python

出現這種錯誤需要修改環境變數,將你的python路徑新增進去,
我的電腦–》屬性–》高階系統設定–》環境變數–》系統變數Path

我的路徑

記住前面加分號**“;”**不是冒號。安裝的時候提醒過你記住你的安裝位置了。

@在Python中,等號=是賦值語句,可以把任意資料型別賦值給變數,同一個變數可以反覆賦值,而且可以是不同型別的變數,這種變數本身型別不固定的語言稱之為動態語言,與之對應的是靜態語言。

@對縮排要求嚴格,首行不能有空格。

@理解變數在計算機記憶體中的表示也非常重要。當我們寫:a = 'ABC’時,Python直譯器幹了兩件事情:

  1. 在記憶體中建立了一個’ABC’的字串;
  2. 在記憶體中建立了一個名為a的變數,並把它指向’ABC’。

@用PDB除錯
Import pdb
pdb.set_trace() #相當於執行斷點,停在這裡,然後可以用p 變數名 ,檢視變數。或者用命令c繼續執行。IDE最上面有基本除錯工具。