001
#交換兩個變量值
a,b = b,a
#去掉list中的重復(fù)元素
old_list = [1,1,1,3,4]
new_list = list(set(old_list))
#翻轉(zhuǎn)一個字符串
s = 'abcde'
ss = s[::-1]
#用兩個元素之間有對應(yīng)關(guān)系的list構(gòu)造一個dict
names = ['jianpx', 'yue']
ages = [23, 40]
m = dict(zip(names,ages))
#將數(shù)量較多的字符串相連亿柑,如何效率較高糕篇,為什么
fruits = ['apple', 'banana']
result = ''.join(fruits)
#python字符串效率問題之一就是在連接字符串的時候使用‘+’號涨缚,
例如 s = ‘s1’ + ‘s2’ + ‘s3’ + ...+’sN’熬尺,總共將N個字符
串連接起來淮阐, 但是使用+號的話仑嗅,python需要申請N-1次內(nèi)存空間躺苦,
然后進行字符串拷貝源葫。原因是字符串對象PyStringObject在python
當(dāng)中是不可變 對象,所以每當(dāng)需要合并兩個字符串的時候哈恰,就要重新
請一個新的內(nèi)存空間 (大小為兩個字符串長度之和)來給這個合并之后
的新字符串只估,然后進行拷貝志群。 所以用+號效率非常低着绷。建議在連接字符串
的時候使用字符串本身的方法 join(list),這個方法能提高效率锌云,原
因是它只是申請了一次內(nèi)存空間荠医, 因為它可以遍歷list中的元素計算出
總共需要申請的內(nèi)存空間的大小,一次申請完桑涎。
002
>>> D = {'a':1,'b':2,'c':3,'d':4}
>>> D.items() #一次性取出所有
[('a', 1), ('c', 3), ('b', 2), ('d', 4)]
>>> D.iteritems() #迭代對象彬向,每次取出一個。用for循環(huán)遍歷出來攻冷;
<dictionary-itemiterator object at 0x00000000026243B8>
>>> for i in D.iteritems():
... print i,
...
('a', 1) ('c', 3) ('b', 2) ('d', 4)
>>> for k,v in D.iteritems():
... print k,
...
a c b d
總結(jié):
1. 一般iteritems()迭代的辦法比items()要快娃胆,特別是數(shù)據(jù)庫比較大時。
2. 在Python3中一般取消前者函數(shù)
003
這是代碼結(jié)構(gòu)設(shè)計的問題等曼,模塊依賴和類依賴
如果老是覺得碰到循環(huán)引用里烦,很可能是模塊的分界線劃錯地方了〗可能是把應(yīng)該在一起的東西硬拆開了胁黑,可能是某些職責(zé)放錯地方了,可能是應(yīng)該抽象的東西沒抽象
總之微觀代碼規(guī)范可能并不能幫到太多州泊,重要的是更宏觀的劃分模塊的經(jīng)驗技巧丧蘸,推薦uml,腦圖遥皂,白板等等圖形化的工具先梳理清楚整個系統(tǒng)的總體結(jié)構(gòu)和職責(zé)分工
采取辦法力喷,從設(shè)計模式上來規(guī)避這個問題刽漂,比如:
1. 使用 “__all__” 白名單開放接口
2. 盡量避免 import
004
#python 類型轉(zhuǎn)換
函數(shù) 描述
int(x [,base]) 將x轉(zhuǎn)換為一個整數(shù)
long(x [,base] ) 將x轉(zhuǎn)換為一個長整數(shù)
float(x) 將x轉(zhuǎn)換到一個浮點數(shù)
complex(real [,imag]) 創(chuàng)建一個復(fù)數(shù)
str(x) 將對象 x 轉(zhuǎn)換為字符串
repr(x) 將對象 x 轉(zhuǎn)換為表達式字符串
eval(str) 用來計算在字符串中的有效Python表達式,并返回一個對象
tuple(s) 將序列 s 轉(zhuǎn)換為一個元組
list(s) 將序列 s 轉(zhuǎn)換為一個列表
set(s) 轉(zhuǎn)換為可變集合
dict(d) 創(chuàng)建一個字典。d 必須是一個序列 (key,value)元組弟孟。
frozenset(s) 轉(zhuǎn)換為不可變集合
chr(x) 將一個整數(shù)轉(zhuǎn)換為一個字符
unichr(x) 將一個整數(shù)轉(zhuǎn)換為Unicode字符
ord(x) 將一個字符轉(zhuǎn)換為它的整數(shù)值
hex(x) 將一個整數(shù)轉(zhuǎn)換為一個十六進制字符串
oct(x) 將一個整數(shù)轉(zhuǎn)換為一個八進制字符串
#list和tuple如何轉(zhuǎn)換
#兩者可以直接相互轉(zhuǎn)換
t = (1,2,3)
tt = list(t)
tt = tuple(tt)
005編碼問題
#先來看個小例子:
print(u'中文')
print('中文')
2
6
006
#Python判斷當(dāng)前用戶是否是root
import os
if os.getuid() != 0: # root賬號的uid=0
print os.getuid()
print 'Should run as root account'
else:
print 'Hello, Root!'
#
007默寫盡可能多的str對象的方法
#方法 #描述
-------------------------------------------------------------------------------------------------
S.capitalize() #返回首字母大寫的字符串的副本
S.center(width[,fillchar]) #返回一個長度為max(len(S),width),S居中爽冕,兩側(cè)fillchar填充
S.count(sub[,start[,end]]) #計算子字符串sub的出現(xiàn)次數(shù),可將搜索范圍限制為S[start:end]
S.decode([encoding[,error]]) #返回使用給定編碼方式的字符串的解碼版本披蕉,由error指定錯誤處理方式
S.endswith(suffix[start[,end]]) #檢查S是否以suffix結(jié)尾颈畸,可給定[start:end]來選擇匹配的范圍
S.expandtabs([tabsize]) #返回字符串的副本,其中tab字符會使用空格進行擴展没讲,可選擇tabsize
S.find(sun[,start[,end]]) #返回子字符串sub的第一個索引眯娱,不存在則為-1,可選擇搜索范圍
S.index(sub[,start[,end]]) #返回子字符串sub的第一個索引,不存在則引發(fā)ValueError異常.
S.isalnum() #檢查字符串是否由字母或數(shù)字字符組成
S.isalpha() #檢查字符串是否由字母字符組成
S.isdigit() #檢查字符串是否由數(shù)字字符組成
S.islower() #檢查字符串是否由小寫字母組成
S.isspace() #檢查字符串是否由空格組成
S.istitle() #檢查字符串時候首字母大寫
S.isupper() #檢查字符串是否由大寫字母組成
S.join(sequence) #返回其中sequence的字符串元素由S連接的字符串
S.ljust(width[,fillchar]) #返回S副本左對齊的字符串,長度max(len(S),W),右側(cè)fillchar填充
S.lower() #返回所有字符串都為小寫的副本
S.lstrip([char]) #向左移除所有char爬凑,默認移除(空格,tab,\n)
S.partition(seq) #在字符串中搜索seq并返回
S.replace(old,new[,max]) #將new替換olad,最多可替換max次
S.rfind(sub[,start[,end]]) #返回sub所在的最后一個索引徙缴,不存在則為-1,可定搜索范圍S[start:end]
S.rindex(sub[,start[,end]]) #返回sub所在的最后一個索引,不存在則會引發(fā)ValueError異常嘁信。
S.rjust(width[,fillchar]) #返回S副本右對齊的字符串,長度max(len(S),W),左側(cè)fillchar填充
S.rpartition(seq) #同Partition,但從右側(cè)開始查找
S.rstip([char]) #向右移除所有char于样,默認移除(空格,tab,\n)
S.rsplit(sep[,maxsplit]) #同split,但是使用maxsplit時是從右往左進行計數(shù)
S.split(sep[,maxsplit]) #使用sep做為分割符,可使用maxsplit指定最大切分數(shù)
S.zfill(width) #在S的左側(cè)以0填充width個字符
S.upper() #返回S的副本,所有字符大寫
S.splitlines([keepends]) #返回S中所有行的列表潘靖,可選擇是否包括換行符
S.startswith(prefix[,start[,end]]) #檢查S是否以prefix開始穿剖,可用[start,end]來定義范圍
S.strip([chars]) #移除所有字符串中含chars的字符,默認移除(空格卦溢,tab,\n)
S.swapcase() #返回S的副本糊余,所有大小寫交換
S.title() #返回S的副本,所有單詞以大寫字母開頭
S.translate(table[,deletechars]) #返回S的副本单寂,所有字符都使用table進行的轉(zhuǎn)換贬芥,可選擇刪除出現(xiàn)在deletechars中的所有字符
008
# 現(xiàn)在有一個dict對象adict,里面包含了一百萬個元素,查找其中的某個元素的平均需要多少次比較
O(1) 哈希字典,快速查找宣决,鍵值映射蘸劈,鍵唯一!
#有一個list對象alist,里面的所有元素都是字符串尊沸,編寫一個函數(shù)對它實現(xiàn)一個大小寫無關(guān)的排序
words = ['This','is','a','dog','!']
words.sort(key=lambda x:x.lower())
print words
#打亂一個排好序的list對象alist
# random模塊中的shuffle(洗牌函數(shù))
import random
alist = [1, 2, 3, 4]
random.shuffle(alist)
print alist
# 有一個長度是101的數(shù)組威沫,存在1~100的數(shù)字,有一個是重復(fù)的椒丧,拿重復(fù)的找出來
# Python中壹甥,主要是拿count(i) ==2的找出來即可,再利用列表推導(dǎo)式
>>> l = [1, 2, 3, 4, 2]
>>> tmp = []
>>> [tmp.append(i) for i in l if l.count(i) == 2]
[None, None]
>>> tmp
[2, 2]
>>> set(tmp)
set([2])