列表
特點(diǎn):
1.是有序的
2.可以重復(fù)的
3.可變類型
1.創(chuàng)建和刪除列表
通過 []
創(chuàng)建或者 list()
函數(shù)轉(zhuǎn)化
list_name=['a', 'b']
list_name = [] # 創(chuàng)建空列表
list_name = list(range(0, 100, 2)) # 通過list函數(shù)轉(zhuǎn)化得到列表
del list_name # 刪除列表
2.增加列表元素
2. 1 list.append(x)
:尾部添加單個(gè)元素
ls = []
for each in range(100):
if each % 2 == 0:
ls.append(each)
2. 2 list.extend(last_x)
:尾部添加一個(gè)列表所有元素
ls = [1, 2, 3]
ls_extend = [4, 5, 6]
ls.extend(ls_extend) # 也可以在中間位置插入一個(gè)列表的所有元素
ls[1:1] = ls_extend
2. 3 list.insert(index, obj)
:指定位置插入元素
ls = [1, 2, 4]
ls.insert(1, 88)
print(ls) # out: 1, 88, 2, 4
3.刪除列表元素
3. 1 list.pop([index])
:刪除指定index元素途样,默認(rèn)是最后一個(gè),并返回刪除元素
整體返回: 返回pop()
,刪除的最后一項(xiàng)數(shù)據(jù)
是否改變?cè)斜? 改變?cè)斜?/p>
ls = [1, 2, 3]
ls.pop(1) # out: 2
3. 2 list.remove(x)
:刪除元素
ls = [1, 2, 3]
del ls[2] # 刪除指定索引列表元素:3
ls.remove(2) # 移除列表元素:2
3. 3 list.clear()
:清空列表中的所有元素
ls = [1, 2, 3, 4]
x.clear() # 清空所有元素
4.修改列表元素
# 通過下標(biāo)修改
ls = [1, 2, 3]
ls[1] = 88
print(ls) # out: [1, 88, 3]
# 通過切片修改
ls = [1, 2, 3]
ls[0:2] = ["6", "7"]
print(ls) # out: [6, 7, 3]
5.查找列表元素
5. 1 直接通過下標(biāo)查找
ls = [1, 2, 3]
print(ls[0]) # out:1
5. 2 list.index(v [, begin[, end]])
:獲取指定元素的索引號(hào)
ls = [1, 2, 3]
ls.index(2) # out:1
6.排序缩麸、反轉(zhuǎn)和復(fù)制
6. 1 list.sort(key=None, reverse=False)
:排序
key用來指定排序規(guī)則辅鲸。reserve = Flase 升序/正向排序(默認(rèn)),True降序/反向排序合敦;函數(shù)本身不會(huì)返回
不傳參數(shù)就默認(rèn)排序,可以傳入一個(gè)函數(shù)作為參數(shù),自定義排序規(guī)則
整體返回: 返回排序的列表
是否改變?cè)斜? 改變?cè)斜?/p>
ls = [1, 3, 8, 2]
ls.sort(key=None, reverse=True) # out: [8, 3, 2, 1]
'''兩者區(qū)別:sorted方法不會(huì)改變?cè)瓉韑ist,而是會(huì)返回一個(gè)新的已經(jīng)排序好的list'''
ls_1 = [1, 3, 2, 4]
ls_1 = sorted(ls_1, key=None, reverse=True)
print(ls_1) # out: [4, 3, 2, 1]
6. 2 list.reverse(x)
:列表元素反轉(zhuǎn)
該方法無須傳參數(shù)
整體返回: 返回翻轉(zhuǎn)后的列表
是否改變?cè)斜? 改變?cè)斜?/p>
ls = [1, 5, 2]
ls.reverse()
print(ls) # out: [2, 5, 1]
6. 3 list.copy()
:淺復(fù)制列表
ls = [1, 2, 3, 4]
ls_copy = ls.copy()
print(ls_copy) # out: [1, 2, 3, 4]
7.列表操作函數(shù)
7. 1 min()需五、max()、sum()含衔、len()
:找最小值族奢、最大值姥闭、求和(元素為數(shù)值型)、長(zhǎng)度
ls = [1, 2, 4]
ls_sum = sum(ls) # 7
ls_min = min(ls) # 1
ls_max = max(ls) # 4
ls_len = len(ls) # 3
7. 2 list.count(x)
:獲取列表中元素出現(xiàn)的次數(shù)
ls = [1, 2, 1, 5, 2]
ls.count(2) # out: 2
7. 3 tuple()
:將列表轉(zhuǎn)化為元組(元組元素不可變)
ls = [1, 2, 3]
tup = tuple(ls)
print(tup) # out: (1, 2, 3)
8.列表切片
方法 :list[ start : end : step ]
start :切片的起始位置
end :是切片的結(jié)束位置(不包括)
step :可以不提供越走,默認(rèn)值是1棚品,步長(zhǎng)值不能為0,不然會(huì)報(bào)錯(cuò)ValueError廊敌。步長(zhǎng)是正數(shù)铜跑,從左往右取骡澈;步長(zhǎng)是負(fù)數(shù)锅纺,從右往左取。
出現(xiàn)情況:
①list[start : end] 切片是不包含后面那個(gè)元素的值(顧頭不顧尾)
②list[ : end] 如果切片前面一個(gè)值缺省的話肋殴,從開頭開始取
③list[start : ] 如果切片后面的值缺省的話囤锉,取到末尾
④list[ : ] 如果全部缺省,取全部
⑤list[start : end : step]
- 如果第一個(gè)索引是
0
护锤,還可以省略
ls = [1, 2, 4, 7, 88]
var = ls[:2]
print(var) # out:[1, 2]
- 支持負(fù)數(shù)
ls = [1, 2, 4, 7, 88]
a = ls[-1] # out: 88
b = ls[:-1] # out: [1, 2, 4, 7]
c = ls[:-2:] # out: [1, 2, 4]
d = ls[-2:] # out: [7, 88]
e = ls[-2:-1] # out: [7]
f = ls[::-1] # out:[88, 7, 4, 2, 1]
print(a, b, c, d, e, f)
- 拓展:二維列表及其切片
a=[['a', 'b', 'c'], [1, 2, 3]]
a[1][2] # out: 3
9.列表推導(dǎo)式
[expression for var in list]
a =[1, 3, 5, 6, 9]
b = [x**2 for x in a]
print(b) # out: [1, 9, 25, 7, 10]
def f(data):
return data + 1
b = [f(x) for x in a] # 使用自定義函數(shù)
print(b) # out: [2, 4, 6, 7, 10]
[expression for var in list if condition]
a =[1, 3, 5, 6, 9]
b = [x**2 for x in a if x > 3]
[expression if condition else expression for var in list]
a =[1, 3, 5, 6, 9]
b = ['奇數(shù)' if x%2 != 0 else '偶數(shù)' for x in a]
[x for a in b for x in a]
:二維列表推導(dǎo)式應(yīng)用
'''對(duì)列表中元素為列表的所有子元素求和'''
l = [[1, 2], 1, [1, 2, 3], 4, [6, 7]]
s = sum([x for y in l if isinstance(y, list) for x in y])
'''我們把列表推導(dǎo)式展開官地,這樣獲取變得好結(jié)構(gòu)清楚些'''
def list_expend():
ls = []
for y in l:
if isinstance(y, list):
for x in y:
ls.append(x)
return ls
10.列表拆包
某些情況下,我們可能需要取列表中的幾個(gè)值烙懦,這樣我們可以使用了列表切片來逐一賦值驱入,此外我們還可以使用‘*’列表拆包一步到位。
prop = ['張三', '男', '70kg', 18, '178cm']
'''我們獲取列表中的姓名和性別元素'''
name,sex = prop
print(name,sex) # out: ('張三', '男')
'''姓名氯析,年齡亏较,身高'''
name,age,height = prop
print(name,age,height) # out: ('張三', 18, '178cm')
'''成績(jī):去除最大值最小值='''
grade = [80, 75, 23, 100, 85]
grade_valid = sorted(grade)
print(grade_valid) # out: [75, 80, 85]
11.slice()
截取方法
通過slice(start, end)
(在原有列表中竊取新列表)生成可切片對(duì)象,賦值給變量掩缓,很多時(shí)候往往使得代碼可讀性更好
start : 截取列表開始的下標(biāo);
end: 截取列表結(jié)束時(shí)的下標(biāo),竊取的列表不包含這個(gè)下標(biāo)對(duì)應(yīng)的內(nèi)容;若end參數(shù)省略,將截取從start開始的剩余所有內(nèi)容宴杀。
整體返回:返回截取后的新列表
是否改變?cè)斜?不改變?cè)斜?/p>
dt = '20190714'
year = slice(0, 4) # 生成切片對(duì)象slice
print(dt[year]) # '2019'