python入門:列表和元組

列表與元組的主要不同在於,列表是可以修改的,元組不可以。列表適用於需要中途添加元素的情形,元組適用於出於某種考慮禁止修改序列的情形。在需要處理一系列值時,序列很有用,在數據庫中,你可能使用序列來表示人,其中第一個表示姓名,第二個表示年齡。用列表表示如下:

user=['Andy',20]

序列還可包含其他序列

user=['Andy',20]
use=['john',21]
database=[user,usr]
database
[['Andy', 20], ['john', 21]]
data=['Aurora',user]
data
['Aurora', ['Andy', 20]]

有幾種操作使用於所有序列,包括索引、切片、相加、相乘和成員檢查。另外還有一些內置函數,可用於確定序列的長度以及找出序列中最大和最小的元素。

索引:

序列中所有的元素都有編號-從0開始遞增

set='Hello'
set[0]
'H'
字符串就是由字符組成的序列,索引0指向第一個元素,這裏爲字母H,不同於其他一些語言,python沒有表示字符的類型。因此一個字符就是隻包含一個元素的字符串。

這稱爲索引,還可使用負索引來獲取元素

set[-1]
'o'

對於字符串字面量(以及其他序列字面量)可直接對其執行索引操作,無需先將其賦給變量,這與先賦給變量在對變量執行索引操作的效果一樣。

'Hello'[1]
'e'

如果函數調用返回一個序列,可直接對其執行索引操作。例如,你只想獲取用戶輸入的姓名第二位:

name=input('name: ')[2]
name: john
name
'h'

切片:

使用索引來訪問單個元素外,還可使用切片來訪問特定範圍內的元素,使用兩個索引用冒號分隔:

tag='<a href="How long have you been studying python">python web site</a>'
tag[9:30]
'How long have you bee'
tag[49:-4]
'python web site'

切片適用於提取序列一部分,其中的編號非常重要,第一個索引是包含第一個元素的編號,第二個索引是切片後前一位的元素編號(下標從0開始)

number=[1,2,3,4,5,6,7,8,9,10]
number[3:6]
[4, 5, 6]

兩個索引來指定切片的邊界,其中一個索引指定的元素包含在切片內,第二個索引指定的元素不包含在切片內。

簡寫:

# 如果切片結束與序列末尾,可省略第二個索引:
number[-3:]
[8,9,10]
# 如果切片始於序列開頭,可省略第一個索引:
number[:3]
[1,2,3]
# 複製序列
number[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

步長:

執行切片操作時,顯示或隱示地制定起點和終點,但通常省略另一個參數,即步長。在普通切片中,步長爲1(從一個元素移動到下一個元素),切片包含起點和終點之間的所有元素。

number[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
number[0:10:2]
[1, 3, 5, 7, 9]

也可以簡寫:

number[::4]
[1, 5, 9]

步長不能爲0,但是可以是負數,這樣獲取元素的位置是從右向左。

number[::-2]
[10, 8, 6, 4, 2]

步長爲正數時,它從起點移到終點,步長爲負數時,它從終點移到起點。

序列相加:

[1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
[1,2,3]+'world'
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    [1,2,3]+'world'
TypeError: can only concatenate list (not "str") to list

不能拼接序列與字符串,雖然他們都是序列,一般不能拼接不同類型的序列。

乘法:

'hello' * 2
'hellohello'
[2] * 3
[2, 2, 2]

如先定義序列但並不爲其賦值可用

name=[None] *  5
name
[None, None, None, None, None]

成員資格:

檢查特定的值是否包含在序列中,使用in.滿足條件返回true,否則返回false.

name='Andy'
'A' in name
True
# 對於字符串來說只有它包含的字符纔是其成員或元素。
'p' in 'python'
True

長度、最小值、最大值

number=[100,20,80]
len(number)
3
max(number)
100
min(number)
20
max(2,3,7)
7

列表常用方法

#賦值
x = [1,2,1]
x[1]= 3
x
[1, 3, 1]
# 刪除元素
x = [1,3,1]
del x[1]
x
[1, 1]
# 給切片賦值
name=list('Perl')
name
['P', 'e', 'r', 'l']
name[3:]=list('ar')
name
['P', 'e', 'r', 'a', 'r']
# 還可以在不刪除原有元素的情況下插入新元素
name[1:1]=list('el')
name
['P', 'r', 'l', 'e', 'r', 'a', 'r']
del name[1::2]
name
['P', 'l', 'r', 'r']

方法是與對象(列表、數、字符串等)聯繫緊密的函數。

# 在末尾追加元素:append
number.append(4)
number
[1, 2, 3, 4]
# 清空列表:clear
number.clear()
number
[]
# 複製:copy
a  = [1,2,3] 
b = a
b[1]=4
b
[1, 4, 3]
a
[1, 4, 3]

a = [1,4,3]
b=a.copy()
b[1]=5
a
[1, 4, 3]
# 計數:count
['to','be','or','not','to','be'].count('to')
2
x=[[1,2],1,2,[1,2,[2,1]]]
x.count(1)
1
# 擴展追加exend
a =[1,2,3]
b= [4,5,6]
a.extend(b)
a
[1, 2, 3, 4, 5, 6]
b
[4,5,6]

a+b
[1, 2, 3, 4, 5, 6, 4, 5, 6]
a
[1, 2, 3, 4, 5, 6]
b
[4, 5, 6]

# 查找第一次在序列中出現的索引
a =['to','be','or','not','to','be']
a.index('be')
1
a[1]
'be'
# inster:插入
number = [1,2,3,4,5]
number.insert(2,8)
number
[1, 2, 8, 3, 4, 5]
# pop刪除末尾最後一個元素並返回刪除元素,pop是唯一既修改列表又返回一個非none值的列表方法。
number.pop()
5
number
[1, 2, 8, 3, 4]

number.insert(0,number.pop(0))

# 刪除第一個指定值的元素
a =['to','be','or','not','to','be']
a.remove('to')
a
['be', 'or', 'not', 'to', 'be']
# 倒序排列:reverse
number = [2,8,3,4]
number.reverse()
number
[4, 3, 8, 2]
# 對列表就地排序指對原表進行修改:sort
number = [4,3,8,2]
number.sort()
number
[2, 3, 4, 8]


元組:不可修改的序列

元組的幾種寫法。

(1,2,3)
 1,2,3
 (2,)
 2,
3 * (20+2)
66
3* (20+2,)
(22, 22, 22)
(22)與22完全等效,加上逗號,就能完全改變表達式的值

函數tuple的工作原理與list很像,它將一個序列作爲參數,並將其轉換爲元組。如果參數是元組,就原封不動的返回。

tuple([1,2,3])
(1,2,3)
tuple('abc')
('a','b','c')
tuple((1,2,3))
(1,2,3)
x = 1,2,3
x[1]
2
x[0:2]
(1,2)































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