字符串
字符串是最 Python 中常用的數據類型,可以對字符串進行索引,切片及迭代。
在python中字符串是不可變的,一旦聲明,不能改變;對字符串變量的賦值和修改實際上是新建了一個相同變量名的對象。
注意:由於字符串是不可變的,在使用索引修改字符串是不允許的
var1 = 'python'
print id(var1)
var1 = 'PHP'
print id(var1)
var1 = 'python'
print id(var1)
var1 = var1 + 'hello world'
print id(var1)
31385280
37524841
41536543
38144556
對比發現修改這些對字符串的修改、賦值實際上是創建了一個新的變量(它們的地址都不相同)
字符串的基本操作
+ :string1+string2 #聯接字符串,將後一個串鏈接到前一個串的後面
* :string*n #創建一個新字符串重複n次原來的串
[] :string[n] #從字符串中獲取對應位置的一個字符
[:] :string[n:m] #截取字符串,如果爲:m從頭到m如果爲n:從n到尾
in :char in string #判斷一個字符(串)是否在串中,如果在返回爲真(True)
not in :char not in string #判斷一個字符(串)是否不在串中,如果在返回爲真(True)
r/R :r'hello\r\nworld' R'hello\r\nworld' #禁止轉義字符的實際意義,整個字符爲原始意義
% :'hello %s'%('world') #格式化字符串
len() : 長度len(s),與s.__len__()功能相同(其實len(s)本來就是調用的s.__len__())
Unicode字符串
python定義一個 Unicode 字符串和定義一個普通字符串一樣
u'Hello World !'
但是它還可以自動轉換Unicode-Escape 編碼的字符
u'Hello\u0020World !' = u'Hello World !'
常用的幾個方法
可以使用dir(str)查看有哪些內建函數
string = ''
string.find('str') #成功返回所在字符串的下標,失敗返回負數
string.isalnum() #字符串的元素是否全爲數字,是:true,否:false
string.replace('old', 'new') #替換字符串中的‘on’爲‘oner’,並返回新的字符串
string.split('str') #按照'str'拆分字符串,返回一個列表(但注意,不要讓被拆分的字符串長度(str)大於原字符串(string)的長度)
string.strip() #默認截掉字符串兩邊的空格,也可帶參數:string.strip(str) 截掉字符串兩端的str,如果有的話
string.count('sub') #統計'sub'在字符串中出現的次數
','.join(object) #以','爲分割,合併一個可迭代的對象爲字符串(但迭代的值必須爲string)
使用格式化字符串比以‘+’連接字符串效率高(但是我測試了100W次,沒發現大的區別)
就好像range和xrange,當次數小於10W時range佔得資源並不多。效率也要高一些當大於100W時xrange效率更高
列表
基本操作
len([1, 2, 3]) 3 長度
[1, 2, 3] + [4, 5] [1, 2, 3, 4, 5] 組合
['Hi!'] * 3 ['Hi!','Hi!','Hi!'] 重複
3 in [1, 2, 3] True 元素是否存在於列表中
for x in [1, 2, 3]: print x, 1 2 3 迭代
del l[2] (l = [1,2,3]) [1,3] 刪除元素
del l (l = [1,2,3]) None 刪除列表
內建函數
list.append(obj) 在列表末尾添加新的對象
list.count(obj) 統計某個元素在列表中出現的次數
list.extend(seq) 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)
list.index(obj) 從列表中找出某個值第一個匹配項的索引位置
list.insert(index, obj) 將對象插入列表
list.pop(obj=list[-1]) 移除列表中的一個元素(默認最後一個元素),並且返回該元素的值
list.remove(obj) 移除列表中某個值的第一個匹配項
list.reverse() 反向列表中元素
list.sort([func]) 對原列表進行排序
元組
元組與列表類似,但是元組的元素不能修改
t = (1,2,3,4)
t[1] = 0 #這種方式是錯誤的
同樣也不能使用del單獨刪除某一元素,但可以刪除整個元組
t1 = (1,2)
t2 = (3,4)
t3 = t1 + t2 #合併兩個元組稱爲新的元組
tuple(obj)可以將可迭代的對象生成一個新的元組
字典
基本操作
dic['key'] = value 修改或增加字典元素
del dic['key'] 刪除字典元素
del dic 刪除字典
內置函數
dic.clear() 刪除字典內所有元素
dic.copy() 返回一個字典的淺複製
dic.fromkeys() 創建一個新字典,以序列seq中元素做字典的鍵,val爲字典所有鍵對應的初始值
dic.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回default值
dic.has_key(key) 如果鍵在字典dict裏返回true,否則返回false
dic.items() 以列表返回可遍歷的(鍵, 值) 元組數組
dic.keys() 以列表返回一個字典所有的鍵
dic.setdefault(key, default=None) 和get()類似, 但如果鍵不已經存在於字典中,將會添加鍵並將值設爲default
dic.update(dict2) 把字典dict2的鍵/值對更新到dict裏
dic.values() 以列表返回字典中的所有值
集合
集合與列表相似,但值不能重複,
set()可以把可迭代對象生成集合類型,並將刪除重複的值(可以利用這個特性,對某些對象去重)
基本操作
& 取交集
| 取並集
- 取差集
注意:
列表和字典在方法調用時是以引用的方式傳遞參數的,如果不希望在後面代碼中使用被調用方法修改後的值,可以在參數傳遞之前,使用深拷貝將值複製給另一個參數。