1. 程式人生 > >Python:list列表

Python:list列表

列表 list

列表 list
	列表是一種容器
	列表是可以被改變的序列容器

建立空列表的字面值
	L = []  # L 繫結一個新建立的空列表

建立非空列表的字面值:
	L = [1, 2, 3, 4]
	L = ["北京", "上海", "深圳"]
	L = [1, "二", 3.14, "Four"]
	L = [1, 2, [3.1, 3.2, 3.3], 4]

列表的構造(建立)函式 list
	list()         建立一個空的列表,等同於[]
	list(iterable)  用可迭代物件建立一個列表
示例:
	L = list()  # L繫結空列表
	L = list("hello")  #L繫結['h','e','l','l','o']
	L = list(range(10))  # L繫結[0,1,2,3...9]

**列表的運算:**
	算術運算子
	+  +=  *   *= 
示例:
	+ 加號用於拼接列表
  	x = [1, 2, 3]
  	y = [4, 5, 6]
  	z = x + y  # z = [1, 2, 3, 4, 5, 6]
	+= 用於原列表與右側可迭代物件進行拼接,用變數繫結列表
語法:
    x += 可迭代物件
如:
    x = [1, 2, 3]
    y = [4, 5, 6]
    x += y  # x繫結[1, 2, 3, 4, 5, 6]
    x = 
* 生成重複的列表
*=  讓原列表重複n次再用原變數繫結
 	 x = [1, 2] * 3  # x =[1, 2, 1, 2, 1, 2]
 	 x = [1, 2]
  	x *= 2  # x = [1, 2, 1, 2]
  	列表的比較運算:
運算子:
  <  <=  >  >=  ==  != 
說明:
  列表的比較規則與字串的比較規則相同
  列表要求每兩個元素能依次進行比較,否則會出現型別錯誤
示例:
  [1, 2, 3]  < [1, 2, 4]  # True
  [1, 2, 3] != [1, 2, 4]  # True
  ["One", "Two"] < ["1", "2"]  # False
  [1, 'Two'] > ['Two', 1]  # TypeError
  [1, "二", 3.14] < [2, "2", 1]  # True

列表的in / not in 運算子

判斷一個值是否存在於列表中,如果存在則返回True,
否則返回False
同字串的 in 運算子類似

示例:
	x = [1, 'Two', 3, "四"]
	3 in x       # True
	"3" in x     # False
	10 not in x  # True

列表的索引操作:

	索引取值
語法:
	x = 列表[整數表示式]
用法:
 	等同於字串的索引(同樣分為正向索引和反向索引)

索引賦值
	列表是可變的序列,可以通過索引賦值改變列表中的元素

語法:
	列表[整數表示式] = 表示式
示例:
	x = [1, 2, 3, 4]
	x[2] = 1 + 2.14  # 改變了第三個元素的值
	print(x)  

列表的切片操作

切片取值
列表[起始索引:終止索引:步長]
列表的切片取值是從原列表中取出想要的元素再次組成一個
新的列表
示例:
	 L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 	 y = L[1:10:2]  # y = [1, 3, 5, 7, 9]

**切片的賦值操作**
作用:
	可以改變原列表的排列,可以插入,和修改資料
語法:
	列表[切片] = 可迭代物件
說明:
	切片賦值的賦值運算子(=)的右側必須是一個可迭代物件
示例:
	L = [2, 3, 4]
	L[0:1] = [1.1, 2.2]  # L=[1.1, 2.2, 3, 4]
	L[0:2] = [2]  # L = [2, 3, 4]
	L[1:2] = [3.1, 3.2]  # L = [2, 3.1, 3.2, 4]

	L = [2, 3, 4]
	L[1:1] = [2.1, 2.2]  # L = [2, 2.1, 2.2, 3, 4]
	L[0:0] = [0, 1]  # L = [0, 1, 2, 2.1 ....]
	L = [2, 3, 4]
	L[3:3] = [5, 6]  # L = [2, 3, 4, 5, 6]

	L = [2, 3, 4]
	L[1:2] = "AB" # L = [2, 'A', 'B', 4]
	L[1:3] = range(7, 10)  # L = [2, 7, 8, 9, 4]

**切片的注意事項:**
	對於步長不等於1的切片賦值,賦值運算子的右側的可迭代物件
提供的元素的個數,一定要等於切片切出的段數

L = [1, 2, 3, 4, 5, 6] 
L[::2] = "ABC"  # 對的
L[::2] = "abcd"  # 錯的

del 語句

可以用於刪除列表的元素
語法:
	del 列表[整數表示式]
	del 列表[切片]
示例:
	L = [1, 2, 3, 4, 5, 6, 7, 8]
	del L[-1]  # L = [1, 2, 3, 4, 5, 6, 7]
	del L[1::2] # L = [1, 3, 5, 7]

python中常用於的序列的函式

len(x)  返回序列的長度
max(x)  返回序列的最大值元素
min(x)  返回序列中最小值元素
sum(x)  返回序列中所有元素的和(元素必須是數字型別)
any(x)  真值測試.如果列表中的一個值為真值則返回True
all(x)  真值測試.如果列表中所有的值為真值則返回True

示例:
	L = ["Beijing", 1, 123]
	print(len(L))  # 3
	L = [8, 3, 6, 2]
	print(max(L))  # 8
	print(min(L))  # 2
	print(sum(L))  # 19

列表常用的方法:

L.append(x)  追加
L.insert(索引, 資料物件)
L.extend(可迭代物件)
L.remove(資料物件)
L.pop([整數索引])
L.clear() 
L.count(資料物件) 
L.index(資料物件) 返回第一次出現的位置
L.sort(reverse=False)  排序
L.reverse()   反轉

列表與字串比較:

1. 列表和字串都是序列,元素之間有先後順序關係
2. 列表和字串有相同的操作: + += * *= < > in ...
3. 字串是不可變化的序列,列表是可變的序列
4. 字串的每個元素只能儲存字元,而列表可以儲存任意型別
	的元素
5. 列表和字串都是可迭代物件

字串的文字解析方法 split 和join

S.split(sep=None)  將字串使用sep作為分隔符分割s
       字串,返回分割後的字串列表;當不給定參
       數時,用空白字元作為分隔符
S.join(iterable)  用可迭代物件中的字串生成一箇中
       間用S進行分隔的字串
示例:
	s = 'Beijing is Capital'
	L = s.split(' ')   # L = ['Beijing', 'is', 'Capital']
	s2 = "##".join(L)  # s2 = "Beijing##is##Capital"

列表推導式 list comprehesion

列表推導式是用可迭代物件建立列表的表示式
作用:
	建立列表
	語法:
		[ 表示式 for 變數 in 可迭代物件]
或
		[ 表示式 for 變數 in 可迭代物件 if 真值表達式]
示例:
	生成一個數值為1~9的平方的列表
  	L = [x**2 for x in range(1, 10)]
	# L = [1, 4, 9, 16 .... 64, 81]
	# 生成一個數值1~9的平方的列表(只要其中奇數的平方)
	L = [x**2 for x in range(1, 10) if x % 2 = = 1]
	# L = [1, 9, 25, 49, 81]
	以上列表推導式可以改寫為:
	L = []
	for x in range(1, 10):
    	if x % 2 == 1:
        	L.append(x**2)

列表推導式的巢狀語法:

[ 表示式
    for 變數1 in 可迭代物件1 if 真值表達式1
        for 變數2 in 可迭代物件2 if 真值表達式2
            .....]
如:
L = [x + y for x in "ABC" for y in "123"]
# L = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 
        'C1', 'C2', 'C3']