Python 列表list小總結 包含字串笛卡爾積,九九乘法表
列表
概念及定義:可以存放不同的資料型別的集合,這一點是與C語言陣列不同之處,C語言陣列只能存放同種型別的資料。
list = ["abc",'123',False,{"abc","123"},1,2,3,["abc","123"]],可以存放 字串,布林,列表,集合,列表...
生成方式:
一、列表生成式
nums = range(strat,stop-1,step)
eg:生成1-99的奇數列表 以及生成99-1的奇數列表
# #0-99的list
nums = range(100)
print (range(1,100,2))
print(range(99,1,-2))
二、列表推導式
其思想是對映,就像數學裡的函式,y= x^2之類的。還可以在原來列表基礎上進行篩選過濾。
resultList = [表示式 for 變數 in 列表 if條件]
nums = [1,2,3,4,5]
resultList = [num **2 for num in nums if num % 2 != 0]
print resultList
用迴圈寫九九乘法表
for num in range(1,10): for n in range(1,num+1): print("%d * %d = %d"%(n,num,n*num)), print("")
用列表和迴圈寫:
print('\n'.join(['\t'.join(['%d * %d = %d'%(num,n,num*n) for n in range(1,num + 1)]) for num in range(1,10)]))
用一行程式碼實現兩個字串的笛卡爾積組合
print( [x + y for x in "lxm" for y in "dl"])
這兩個程式碼的執行結果
list相關操作:
增加
list.append(object)
append 在列表最後追加一個新元素 返回值是None,會直接修改列表
list.insert(self,index,object) 會直接修改列表,插入的值在索引值前面,其餘的值往後移
list.extend(iterable) 作用:往列表裡直接擴充套件可迭代序列,返回值為None,會直接修改原列表。它與append的區別,可以理解我兩個列表的拼接。把元素都分解開,往原list裡新增。
刪除
del 指定元素 可以刪除某個元素,刪除整個列表
list.pop(index = -1) 返回值是刪除的元素,會直接修改原列表。注意越界!
list.remove(object) 返回值是None,會直接修改原列表,如果元素不存在,會直接報錯,如果有多個元素,只刪除最左邊的一個。
修改
list[index] = object 注意越界。這個與字串也不同,字串雖然也可以用索引找到某個字元,但不可以修改。
查詢
items[index] 獲取單個元素, 注意索引正負。
index() 獲取元素索引
idx = index(object,start,end) 這個可以與修改一起使用,如果列表裡有許多一個的數字,它只找到最左邊的。
list.count(object) 獲取指定元素的個數
list.items[start:end:step]獲取多個元素,也叫切片
遍歷
1、根據元素遍歷
for item in list:
print(item)
2、根據索引進行遍歷
for index in range(len(list))
print(index,list[index])
首先要有一個索引列表 indexs = range(len(list)),然後在遍歷整個索引列表,每個索引對應一個指定的元素。
3、通過列舉函式,生成一個新的列舉物件,主要用於將一個可遍歷的資料同時列出資料下標和資料。
enumerate()
首先要根據列表建立一個列舉物件enumerate(list)再遍歷整個列舉物件(列舉物件可以直接被遍歷)
for idx,val in enumerate(list,1):索引值一般從0開始,如果想要從1開始,就跟寫的一樣
4、用迭代器
怎樣判定一個物件是否是可迭代物件 方法:
import collections
instance(obj,collections.Iterable)
迭代器:是可以遍歷位置的物件,從第一個元素開始,往後通過next()函式,進行遍歷,只能往後,不能往前。判定依據:作用於next()函式。它本身也是一個可迭代物件。這說明可迭代器與可迭代物件是不一樣的。判斷方法:
import collections
instance(obj,collections.Iterator)
可以用iter()函式將一個可迭代物件轉換為迭代器
那既然迭代器也是可迭代物件,也可以作用於for in 那為什麼要用它了?理由1:僅僅在迭代到某個元素的時候才處理元素,2,提供了一個統一的訪問集合的介面。
步驟:首先建立一個迭代器物件
l = [1,2,3,4]
it = iter(l)
for v in it:
print(v)
迭代器一般不能多次迭代,如果用next()的話,再取出完畢後會再繼續取 報錯
用 for in會自動處理迭代完畢的錯誤
判定:
for 元素 in list
for 元素 not in list
比較
cmp() 內建函式,只在Python 2.x 版本里有用,如果比較的是列表,則針對每個元素,從左至右一致比較
左>右 為1 左=右 為0 左<右 為-1
print(cmp([1,2,3],[1,3,3]))-->-1
print([1,2,3]>[1,3,3])-->False
排序
方法一:sorted(itearble,key = None,reverse = False)可以對所有課迭代物件進行排序。
key 為排序關鍵字,值為一個函式,此函式只有一個引數。reverse:控制升降序。返回值是一個列表
方法二:列表物件方法:list.sort(key = None,reverse = False)
注意兩者區別:
num = [1,3,2,4,5,6]
result = sorted(num)
print(result,num)
result = num.sort()
print (result,num )
([1, 2, 3, 4, 5, 6], [1, 3, 2, 4, 5, 6])
(None, [1, 2, 3, 4, 5, 6])
這一點很關鍵,如果要對一個列表進行排序然後選出最大值而且不改變原來列表的話話只能選擇內建函式!
亂序
import random
random,shuffle(list)
反轉
list.reverse()
list[::-1]
num = [1,3,2,4,5,6]
# result = sorted(num)
# print(result,num)
# #
result = num.reverse()
print(result,num)
result = num[::-1]
print(result,num)
(None, [6, 5, 4, 2, 3, 1])
([1, 3, 2, 4, 5, 6], [6, 5, 4, 2, 3, 1])