文章目錄
一、元組
元組和列表的區別:
元組是一個受限的列表,它不能對已創建的元組中的內容進行修改,創建了就固定了。
1、創建元組
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
創建空元組:
tup1 = ()
元組中只包含一個元素時,需要在元素後面添加逗號來消除歧義不加逗號,就是int類型
tup1 = (50,)
元組與字符串類似,下標索引從0開始,可以進行截取,組合,切片等。
2、訪問元組
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print "tup1[0]: ", tup1[0]
print "tup2[1:5]: ", tup2[1:5]
#以上實例輸出結果:
#tup1[0]: physics
#tup2[1:5]: [2, 3, 4, 5]
3、修改元組
元組中的元素值是不允許修改的,但我們可以對元組進行連接組合,如下實例:
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下修改元組元素操作是非法的。
# tup1[0] = 100
# 創建一個新的元組
tup3 = tup1 + tup2
print tup3
#以上實例輸出結果:
#(12, 34.56, 'abc', 'xyz')
4、刪除元組
tup = ('physics', 'chemistry', 1997, 2000)
del tup
5、元組內置函數
cmp(tuple1, tuple2):比較兩個元組元素。
len(tuple):計算元組元素個數。
max(tuple):返回元組中元素最大值。
min(tuple):返回元組中元素最小值。
tuple(seq):將列表轉換爲元組。
6、元組特點
tuple和list非常類似,但是tuple一旦初始化就不能修改,比如同樣是列出同學的名字:
代碼如下:
classmates = ('Michael', 'Bob', 'Tracy')
現在,classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他獲取元素的方法和list是一樣的,你可以正常地使用classmates[0],classmates[-1],但不能賦值成另外的元素。
不可變的tuple有什麼意義?因爲tuple不可變,所以代碼更安全。如果可能,能用tuple代替list就儘量用tuple。
tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來
二、字符串
python 字符串操作常用操作,如字符串的替換、刪除、截取、賦值、連接、比較、查找、分割等
1、去除空格
str.strip():刪除字符串兩邊的指定字符,括號的寫入指定字符,默認爲空格
a=' hello '
b=a.strip()
print(b) #輸出:hello
str.lstrip():刪除字符串左邊的指定字符,括號的寫入指定字符,默認空格
str.rstrip():刪除字符串右邊的指定字符,括號的寫入指定字符,默認空格
2、連接字符串
str = 'adb'
print('******'.join(str))
str = ['abc','def']
print('******'.join(str))
執行結果:
此處的連接符就是’******’。
3、查找字符串
a='hello world'
>>> a.index('l')
2
>>> a.index('x') #會報錯!
#str.find:檢測字符串中是否包含子字符串str,可指定範圍
>>> a='hello world'
>>> a.find('l')
2
>>> a.find('x') #不會報錯,找不到回返回-1
-1
4、比較字符串
str.cmp:比較兩個對象,並根據結果返回一個整數。X< Y,返回值是負數 ,X>Y 返回的值爲正數。
>>> a=100
>>> b=80
>>> cmp(a,b)
1
5、是否包含指定字符串
# in |not in
>>> a='hello world'
>>> 'hello' in a
True
>>> '123' not in a
True
6、字符串的長度
str.len
>>>a='hello world'
>>>print(len(a))
11
7、字符串中大小寫轉換
S.lower() #轉換爲小寫
>>> a='Hello World'
>>> print(a.lower())
hello world
S.upper() #轉換爲大寫
>>> a='Hello World'
>>> print(a.upper())
HELLO WORLD
S.swapcase() #大小寫互換
>>> a='Hello World'
>>> print(a.swapcase())
hELLO wORLD
S.capitalize() #首字母大寫
>>> a='Hello World'
>>> print(a.capitalize())
Hello world
8、將字符串放入中心位置可指定長度以及位置兩邊字符
str.center()
>>> a='hello world'
>>> print(a.center(40,'*'))
**************hello world***************
9、字符串統計
>>> a='hello world'
>>> print(a.count('l'))
10、字符串的測試、判斷函數,這一類函數在string模塊中沒有,這些函數返回的都是bool值
S.startswith(prefix[,start[,end]]) #是否以prefix開頭
S.endswith(suffix[,start[,end]]) #以suffix結尾
S.isalnum() #是否全是字母和數字,並至少有一個字符
S.isalpha() #是否全是字母,並至少有一個字符
S.isdigit() #是否全是數字,並至少有一個字符
S.isspace() #是否全是空白字符,並至少有一個字符
S.islower() #S中的字母是否全是小寫
S.isupper() #S中的字母是否便是大寫
S.istitle() #S是否是首字母大寫的
11、字符串切片
str = '0123456789′
print str[0:3] #截取第一位到第三位的字符
print str[:] #截取字符串的全部字符
print str[6:] #截取第七個字符到結尾
print str[:-5:-3] #逆序截取,截取倒數第五位數與倒數第三位數之間
12、分割前中後三部分
s="alex SB alex"
ret = s.partition('SB')
print(ret)
#輸出元組 ('alex ', 'SB', ' alex')
13、字符串替換
s="alex SB alex"
s.replace("al","BB")
print(ret)
#輸出結果 BBex SB BBex
14、按輸入字符切割字符串
s="alexalec"
ret=s.split("e")
print(ret)
#輸出結果 ['al', 'xal', 'c']
15、根據換行執行分割
s="alex\nalec"
ret=s.splitlines()
print(ret)
#輸出結果 ['alex', 'alec']
16、大寫變小寫,小寫變大寫
s="alExAlec"
ret=s.swapcase()
print(ret)
#輸出結果 ALeXaLEC
17、將字符串標題化
s="alExAlec"
ret=s.title()
print(ret)
#輸出Alexalec
18、返回指定長度的字符串,原字符串右對齊,前面填充0
s="alEx Alec"
ret=s.zfill(11)
print(ret)
#輸出結果 00alEx Alec
三、序列
序列是是Python中最基本的數據結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。每個索引對應一個元素。
Python包含 6 中內建的序列,包括列表、元組、字符串、Unicode字符串、buffer對象和xrange對象。
對於序列,都可以使用以下操作:
1.索引
2.切片
3.加
4.乘
5.成員運算符
6.計算序列的長度
7.取序列中的最大、最小值
其中主要說下索引
和切片
的區別!
1、索引
所謂的索引就是對每個元素進行編號,注意,編號是從0開始的。
我們可用通過索引來取得其對應的元素:
l = []
a = ('scolia', 123, True, (), l)
b = a[4]
b.append(1) #append()是列表的一個方法,將一個元素添加到列表的最後,對原列表進行操作,但返回值爲None
print(l)
print(b)
print(id(a[4]))
print(id(l))
print(id(b))
b追加了一個元素1,爲什麼l也改變了呢?b存的是a[4],a[4]存的是l,根據運行結果,我們可以這樣說,對b操作相當於對l這個列表操作,說明無論是a[4],l,還是b它們都指向一個內存地址,那就是[]的內存地址。
如下運行結果可以證明
結論:序列其實是一個容器,裏面可以放任何的對象,而當我們通過索引去取的時候,取到的原對象。那麼我看是不是可以將索引看作是一個特別的變量,它指向的也是內存空間,當然這個說法套到字符串中略顯變扭,我們只能假設字符串是將每個字符都存在一個內存空間中,每個字符都是字符串類型,變量取得的是整個字符串,而索引則是每個字符的變量。我們看看這個假設的結果如何
a = 'abcdabcd'
print("",id(a[0]),"\n",id(a[4])) #逗號不僅可以分隔,還有空格的作用
#注去掉前面的逗號換行後無法對齊!因爲後面那個地址前面有個相當於空格的逗號,而前面那個地址沒有。
驗證上述猜想正確!
2、切片
所謂切片就是在內存空間中產生多個數據,而索引在內容一樣的時候,大家都指向的是同一個內存地址,切片可以將相同的數據在內存中複製幾份,內存地址不一樣!無論存儲數據是否一樣,每個切片都對應一個不一樣的內存地址。