python基礎(四):元組(Tuple)、字符串、序列

一、元組

元組和列表的區別:
元組是一個受限的列表,它不能對已創建的元組中的內容進行修改,創建了就固定了。

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、切片

所謂切片就是在內存空間中產生多個數據,而索引在內容一樣的時候,大家都指向的是同一個內存地址,切片可以將相同的數據在內存中複製幾份,內存地址不一樣!無論存儲數據是否一樣,每個切片都對應一個不一樣的內存地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章