python基礎教程__列表、元組、字符串和字典
在python中最基本的數據結構是序列。python中有六種內建的序列:列表、元組、字符串、unicode字符串、bugffer對象和xrange對象。所有序列都可以進行某些特定的操作,這些操作包括:索引、分片、加、乘、檢查某個元素是否是序列成員、計算序列長度、找出最大最小的元素。
索引:序列中每個元素被分配一個序號即索引,序號從0開始。通過索引訪問元素。使用負數索引時,python會從最後一個元素開始計數,最後一個元素的索引是-1.
>>> greeting="hello"
>>> greeting[0]
'h'
>>> greeting[-1]
'o'
>>>
分片:使用分片操作訪問序列中一定範圍內的元素,通過冒號相隔的兩個索引來實現。第一個索引是需要提取部分的第一個元素的編號,最後的索引是分片之後剩餘部分的第一個元素的編號。
>>> tag=' '
>>> tag[9:30]
'http://www.python.org'
>>> tag[32:-4]
'python web site'
若需要訪問最後3個元素,有兩種方法
#為了讓分片部分包含列表的最後一個元素,必須提供最後一個元素的下一個元素對應的索引作為邊界
>>> numbers[7:10]
[8, 9, 10]
#若分片部分包括序列結尾的元素,只需要置空最後一個索引
>>> numbers[-3:]
[8, 9, 10]
#同理,若分片部分包括序列開始的元素,只需要置空第一個索引
>>> numbers[:3]
[1, 2, 3]
#複製整個序列則兩個索引均置空
進行分片時還有一個參數為步長,默認設置為1,分片操作即按照這個步長逐個遍歷序列的元素,然後返回開始和結束之間的所有元素。步長不可以為0但是步長可以為負數。對於正數步長,python會從序列的頭部開始向右提取元素,直到最後一個元素;而對於負數步長,則是從序列的尾部開始向左提取元素,直到第一個元素
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[::-2]
[10, 8, 6, 4, 2]
序列相加:使用加號進行序列的連接操作,只有相同類型的序列才能進行連接操作,如列表和字符串是無法連接到一起的。
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'hello'+'world'
'helloworld'
>>> [1,2,3]+'hello'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
/<module>/<stdin>
乘法:用數字x乘以一個序列會生成新的序列,而在新的序列中,原來的序列會被重複x次。
>>> 'python'*5
'pythonpythonpythonpythonpython'
空列表可以簡單的用兩個中括號表示([]),但如果需要創建佔用一定空間但不包括任何內容的列表可以採用以下方式。None是Python的內建值。
>>> sequence=[None]*10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]
成員資格:運用in運算符檢查一個元素是否在序列中。其返回的是布爾值,若存在則返回真否則返回假。
>>> permissions='rw'
>>> 'w' in permissions
True
>>> subject='$$$ get rich now $$$'
>>> '$$$' in subject
True
內建函數:len、min、max,len函數。len函數返回序列中所包含元素的數量,min函數和max函數則分別返回序列中最大和最小的元素。
列表
列表與字符串、元組不同之處在於列表是可以修改的。
創建列表
list函數可以將所有類型的序列創建為列表
>>> list('hello')
['h', 'e', 'l', 'l', 'o']
列表的基本操作
1.改變列表進行元素賦值,不能為一個位置不存在的元素進行賦值
2.刪除元素,使用del語句實現
>>> name=['john','amy','jamie']
>>> del name[1]
>>> name
['john', 'jamie']
3.分片賦值:實現一次為多個元素賦值
#可以使用與原序列不等長的序列將分片替換
>>> name=list('perl')
>>> name
['p', 'e', 'r', 'l']
>>> name[1:]=list('ython')
>>> name
['p', 'y', 't', 'h', 'o', 'n']
#一次插入多個新元素
>>> name=[1,5]
>>> name[1:1]=[2,3,4]
>>> name
[1, 2, 3, 4, 5]
#一次刪除多個元素
>>> name[1:4]=[]
>>> name
[1, 5]
列表的方法
1.append方法用來在列表末尾追加新的對象。
#使用lst命名而不用list的原因是list是Python的一個內建函數
>>> lst=[1,2,3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
2.count方法,統計某個元素在列表中出現的次數
>>> ['to','be','to','or','not','be'].count('to')
3.extend方法,用新列表擴展原有的列表
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> b.extend(a)
>>> b
[4, 5, 6, 1, 2, 3]
它與連接方法的區別是,extend修改的是原始列表即列表b,而連接方法則是返回一個新的對象並沒有改變原始列表
4.index方法,用於從列表中找出某個值第一個匹配項的索引位置
>>> knights=['i','like','big','hero']
>>> knights.index('big')
2
5.insert方法將對象插入列表
>>> numbers=[1,2,3,5,6]
>>> numbers.insert(3,'four')
>>> numbers
[1, 2, 3, 'four', 5, 6]
6.pop方法移除列表中的一個元素(默認是最後一個元素),並且返回該元素的值
[1, 2, 3, 'four', 5, 6]
>>> numbers.pop()
6
>>> numbers.pop(2)
3
7.remove方法用於移除列表中某個值的第一個匹配項
>>> numbers
[1, 2, 'four', 5, 'four']
>>> numbers.remove('four')
>>> numbers
[1, 2, 5, 'four']
8.reverse方法將列表中的元素反向存放
9.sort方法用於在原位置對列表進行排序
sort方法修改了x但是返回的卻是空值,所以print y的結果為None
>>> x=[4,3,5,1,9,7]
>>> y=x.sort()
>>> print y
None
若需要保留排序前的副本應該按以下方法
>>> x=[3,4,2,7,1,9,0]
#不可以直接使用y=x這樣x,y則是表示的同一個對象,當x排序後,y的值也會同樣發生變化
>>> y=x[:]
>>> x.sort()
>>> x
[0, 1, 2, 3, 4, 7, 9]
>>> y
[3, 4, 2, 7, 1, 9, 0]
另為一種獲取已排序列表副本的方法就是使用sorted()函數
>>> x=[6,1,3,9,7,0]
>>> y=sorted(x)
>>> x
[6, 1, 3, 9, 7, 0]
>>> y
[0, 1, 3, 6, 7, 9]
10.高級排序,sort函數有兩個可選參數即key和reverse
使用key參數時,必須提供一個在排序過程中使用的函數,但是該函數並不是直接用來確定對象的大小,而是為每個元素創建一個鍵,然後所有元素根據鍵來排序。因此根據長度進行排序,可以使用len作為函數
>>> x=['addddd','dinj','ad']
>>> x.sort(key=len)
>>> x
['ad', 'dinj', 'addddd']
reverse是簡單的布爾值,用來指明列表是否要進行反向排序
元組
創建元組只需要用逗號分隔一些值,元組大部分使用()括起來的,空元組即沒有包含內容的圓括號,實現一個數值的元組也必須加上一個逗號。
創建元組
>>> 34,2,5
(34, 2, 5)
>>> 33,
(33,)
元組的方法
1.tuple函數作用同list函數,將序列轉化為元組
2.元組的分片和訪問同列表一樣。
字符串
字符串格式化使用字符串格式化操作符(%)來實現,使用方法如下
>>> format="hello, %s. %s enough for ya?" #s表示會被格式化為字符串
>>> values=('world','hot')
>>> print format % values
hello, world. hot enough for ya?
PS:如果要在格式化字符串裡面包括百分號,那麼必須使用%%
如果需要格式化實數,可以使用f說明符類型,同時提供所需要的精度。使用方法如下
>>> format="Pi with three decimals: %.3f"
>>> from math import pi
>>> print format % pi
Pi with three decimals: 3.142
>>> '%10f' % pi #10代表字段寬度
' 3.141593'
>>> '%10.2f' % pi #小數點右側的數字2代表精度
' 3.14'
字符串的方法
1.find方法:在一個較長的字符串中查找子字符串,返回子字符串所在位置的最左端索引,如果沒有找到則返回的是-1
2.join方法:是split逆方法,用來在隊列中添加元素
>>> seq=['1','2','3','4']
>>> sep='+'
>>> seq.join(sep)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'
>>> sep.join(seq)
'1+2+3+4'
/<module>/<stdin>
3.lower方法:返回字符串的小寫字母版
4.replace方法:返回某字符串的所有匹配項均被替換之後得到的字符串。
5.split方法,join的逆方法,將字符串分割成序列
>>> '1+2+3+4'.split('+')
['1', '2', '3', '4']
6.strip方法返回去除兩側空格的字符串
7.translate方法和replace方法類似,可以替換掉字符串中的某些部分,但是translate只處理單個字符,並且可以同時進行多個替換,有時候效率比replace要高。
字典
字典是Python中唯一內建的映射類型,字典中的值沒有特殊的順序,都存儲在一個特定的key裡。字典是由多個鍵及其對應的值構成的對組成,鍵和值之間用(:)隔開,每個對之間用(,)隔開,整個字典用({})括起來。空字典由兩個大括號組成。鍵可以為任何不可變類型,列表不能為鍵因為列表是可變的。
創建字典可以通過以下方式
>>> phonebook={'alice':'123','bob':'333','john':'234'}
1.dict函數,通過映射建立字典
>>> items=[('name','bob'),('age',33)]
>>> d=dict(items)
>>> d
{'age': 33, 'name': 'bob'}
>>> d=dict(name='bob',age=43)
>>> d
{'age': 43, 'name': 'bob'}
>>> {}.fromkeys(['names','ages'])
{'ages': None, 'names': None}
4.get方法是更寬鬆的訪問字典項的方法,示例如下
>>> d={}
>>> print d['name']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'name'
>>> print d.get('name')
None
/<module>/<stdin>
5.has_key方法可以檢查字典中是否含有該鍵,相當於 k in d
6.items和iteritems:items方法將字典中的項以列表的形式返回,返回時沒有特殊的順序。iteritems方法的作用同items但是它返回的是一個迭代器對象。很多情況下使用iteritems更加高效。
>>> d={'title':'python web site','url':'http://www.python.org','spam':0}
>>> d.items()
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'python web site')]
>>> d.iteritems()
<dictionary-itemiterator>
>>> list(d.iteritems())
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'python web site')]
/<dictionary-itemiterator>
7.key方法將字典中的鍵以列表的形式返回,而iterkeys則返回的是針對鍵的迭代器。
8.pop方法用來獲得對應於給定鍵的值,並將這個鍵值對從字典移除
9.popitem方法類似於list.pop,但不同於它的是字典彈出的是一個隨即項。
10.setdefault方法類似於get方法,在字典中不含有給定鍵的情況下設定相應的鍵值,並能夠獲得與給定鍵相關聯的值
>>> d={}
>>> d.setdefault('name','unknow')
'unknow'
>>> d['name']='bob'
>>> d.setdefault('name','unknow')
'bob'
當鍵不存在時,setdefault返回默認值並更新字典,當鍵存在時,setdefault返回與其對應的值,但不改變字典。
11.update方法利用一個字典項更新另一個字典。
12.values方法以列表的形式返回字典中的值(itervalues返回值的迭代器)