Python 入門筆記
- 2019 年 10 月 30 日
- 筆記
Python 入門非常簡單,但是對於 Python 的基礎知識確也有許多非常重要的內容,為了入門,我決定重新學習一遍 Python。首先從網上的課程開始。
raw
當一個字元串有有需要轉義的詞的時候,需要用 將內容轉義,但是如果一個字元串中有太多需要轉義的內容的話,就可以使用 raw 標識這個字元串,用來減少 轉義的次數。
r'(-_-)/ (-_-)/'
對於多行的字元串,可以使用 n
, 也可以使用 '''
將多行字元串進行表示。即:
'''Python is created by Guido. Test'''
對於 Python 中使用中文,可以使用 u''
的形式進行調整,也可以使用 # -*- coding: utf-8 -*-
,這樣的話,整個文件都是使用的 utf-8
進行編譯,就不會有問題了。
List
對於 Python 中的 List ,如果想要將數據插入到隊尾,要叫使用 append()
方法,如果想插入到一個非隊尾的位置,可以使用 insert(position, value)
的方法將數據插入。
L = [1,2,5,6] L.append(7) print(L) L.insert(3, 88) print(L)
[1, 2, 5, 6, 7] [1, 2, 5, 88, 6, 7]
而在刪除元素的時候,則使用 pop()
方法,而且在移除元素的同時,還會將數據列印出來。
L = [1,2,5,6] L.append(7) L.insert(3, 88) print(L) L.pop() print(L)
[1, 2, 5, 88, 6, 7] [1, 2, 5, 88, 6]
tuple
創建 tuple 的時候,需要使用 ()
來創建,但是 ()
本身也是運算符,所以在創建包含一個元素的 tuple 時候,不能簡單的使用 t = (1)
這種方案,而是應該使用 t = (1,)
這種形式來創建。
set
set 持有一系列沒有重複的元素,而且是無序的,就像是 dict 的 key 一樣。 set 的創建方式是調用 set()
並向其中傳一個個 list
。
小測試的思考
針對下面的set,給定一個list,對list中的每一個元素,如果在set中,就將其刪除,如果不在set中,就添加進去。
s = set([『Adam』, 『Lisa』, 『Paul』])
L = [『Adam』, 『Lisa』, 『Bart』, 『Paul』]
s = set(['Adam', 'Lisa', 'Paul']) L = ['Adam', 'Lisa', 'Bart', 'Paul'] for x in L: if x in s: s.remove(x) else: s.add(x) print(s)
set(['Bart'])
思考:如果我們認為 s 和 L 是兩個同類型的集合,最後做的操作就是找到 僅存在於 L 或者是 僅存在於 s 中的數據。也就是兩個集合的差集的合集。
s = set(['Adam', 'Lisa', 'Paul']) L = ['Adam', 'Lisa', 'Bart', 'Paul'] m = set(L) a = s - m b = m - s c = a | b print(c)
set(['Bart'])
這裡需要補充一下,對於 set ,a & b 是指的 a 和 b 的交集,a | b 指的 ab 的合集,a – b 和 b – a 都是指的差集,如果是 a – b 則指的是在 a 中存在,但是在 b 中不存在的數據。
遞歸思想
漢諾塔 (http://baike.baidu.com/view/191666.htm) 的移動也可以看做是遞歸函數。
我們對柱子編號為a, b, c,將所有圓盤從a移到c可以描述為:
如果a只有一個圓盤,可以直接移動到c;
如果a有N個圓盤,可以看成a有1個圓盤(底盤) + (N-1)個圓盤,首先需要把 (N-1) 個圓盤移動到 b,然後,將 a的最後一個圓盤移動到c,再將b的(N-1)個圓盤移動到c。
請編寫一個函數,給定輸入 n, a, b, c,列印出移動的步驟:
move(n, a, b, c)
例如,輸入 move(2, 『A』, 『B』, 『C』),列印出:
A –> B A –> C B –> C
#-*- coding:utf-8 -*- # a借b,移c def move(n, a, b, c): if n == 1: print a, '-->', c return # a 借 c 移到 b move(n-1, a,c,b) # 最後一個移動到 c print a, '-->', c # b 借 a 移動到 c move(n-1, b,a,c) move(4, 'A', 'B', 'C')
A --> B A --> C B --> C A --> B C --> A C --> B A --> B A --> C B --> C B --> A C --> A B --> C A --> B A --> C B --> C
遞歸思想是非常重要的一種編程思想,在實現過程中,將一個過程拆分成單獨的一步,將其中想同的點設計成遞歸循環,將不同的設計成不同的分支判斷,經過這個測試,我的遞歸思想非常的弱,希望可以著重的做一些遞歸實現的問題,用來提高自己的程式碼水平。
默認參數
默認參數的使用是為了簡化函數的調用,可以將常用的數據做為默認值,同時又可以在需要的時候,用傳入的參數覆蓋掉默認值。
由於參數的順序要按從左到右的順序讀,所以默認值只能定義在必須的參數右面。
可變參數
Python 可以支援接受任意個參數的數量,傳入的時候使用 def f(*args):
,這樣可以在傳入之後,當做一個 tuple 去處理變數。
迭代
Python 的迭代可以用在任何可以迭代的內容上,包括 list ,tuple,等。迭代永遠取出元素本身,而不是元素的索引。
如果想取出元素的索引,可以使用 enumerate() 函數,例如:
L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index , value in enumerate(L): print index , '-', value
0 - Adam 1 - Lisa 2 - Bart 3 - Paul
迭代 dict 中的值
在 Python 中,迭代 dict 時默認迭代的是其中的 Key 的值,當我們需要使用對應的 value 的值的時候,可以使用 dict.values()
的方法獲取所有的 value 值,也可以使用 dict.itervalues()
方法來迭代。
同樣在迭代所有元素的時候,希望可以迭代整個對象,可以使用 items()
方法或者使用 iteritems()
方法來獲取對象。
條件過濾
[x.upper() for x in L if isinstance(x, str)]
是用來判斷每個在 L 中的內容是否是字元串。
利用這種方式,可以將許多方法簡化成一個表達式。 其中 ininstance(x,str)
方法可以判斷變數 x 是否是字元串。