列表

 

列表基本语法

(1) python列表是python 内置的数据结构对象之一, 相当于数组
(2) 列表是用"[]"包含,内有任意的数据对象,每一个数据对象以逗号(",")分割,每个数据对像称之为元素
(3) python 列表是一个有序的序列
(4) python 列表支持任意的嵌套,嵌套的层次深度没有限制
(5) python中序列长度个数是从0开始计算的

 

列表的定义

mylist = list()
print(mylist)
mylist2 = []
print(mylist2)
mylist3 = list('python')
print(mylist3)

输出结果:

[]
[]
['p', 'y', 't', 'h', 'o', 'n']

 

列表的索引

#       0  1  2
lst = [10,20,30]
#     -3  -2 -1

lst = ['a','b','c','d','e','f']
print(lst[0]) # 获取第一个元素
print(lst[1]) # 获取第二个元素
print(lst[2]) # 获取第三个元素
lst[3] = "x" # 注意. 列表是可以发⽣改变的. 这⾥和字符串不⼀样
print(lst)

输出结果:

a
b
c
['a', 'b', 'c', 'x', 'e', 'f']

 

len

获取容器类型数据中元素个数

listvar = ['a', 'b', 'c', 'x', 'e', 'f']
length = len(listvar)
res = listvar[length-1]
print(res)

# 简写
res = listvar[len(listvar)-1]
print(res)

输出结果:

f
f

 

列表的切片 (同元组)

语法 => 列表[::]  完整格式:[开始索引:结束索引:间隔值]
	(1)[开始索引:]  从开始索引截取到列表的最后
	(2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
	(3)[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)
	(4)[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
	(5)[:]或[::]  截取所有列表

lst = ['a','b','c','d','e','f','g']
# (1)[开始索引:]  从开始索引截取到列表的最后
res =lst[2:]
print(res)
# ['c', 'd', 'e', 'f', 'g']

# (2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
res =lst[:3]
print(res)
# ['a', 'b', 'c']

# (3)[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)
res = lst[3:5]
print(res)
# ['d', 'e']

# (4)[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
# 正向截取
res = lst[::5] # 0 5 10
print(res) 
# ['a', 'f']

# 逆向截取
res = lst[::-3] # -1 -4 -7
print(res)
# ['g', 'd', 'a']

# (5)[:]或[::]  截取所有列表
res = lst[:]
res = lst[::]
print(res)
# ['a', 'b', 'c', 'd', 'e', 'f', 'g']

# (6)列表的获取   (同元组)
#       0  1  2
lst = [10,20,30]
#     -3  -2 -1
print(lst[-1])
# 30

 

列表方法: 增

append

往列表中添加元素, 该元素可以是任何形式的数据结构或者对象, 添加的对象作为列表中的一个元素,放到最后一位。

a = ['a']
print(a)
a.append('b')
print(a)
['a', 'b']
a.append(['c'])
print(a)
a.append({1: 2})
print(a)

输出结果:

['a']
['a', 'b']
['a', 'b', ['c']]
['a', 'b', ['c'], {1: 2}]

 
extend

用于在列表末尾一次性追加另一个序列中的多个值,不是把对象完整的添加,而是把其中每一项拿出来。
注:有的说extend只能是列表, 这种说法不对,可以是序列式的数据结构。

a = ['a']
b,c = [],[]
b.append(a)
c.extend(a)
print(a)
print(b)
print(c)

输出结果:

['a']
[['a']]
['a']

 
extend 和 append 的区别:

append:把整体添加进来
extend:把每一项添加进来
 

insert

两个参数, 第一个是insert的位置, 第二个是insert的元素。

a = ['s',3,4]
a.insert(2,'x')
print(a)
a.insert(2,'y')
print(a)

输出结果:

['s', 3, 'x', 4]
['s', 3, 'y', 'x', 4]

 

列表的删除 ( 可切片 )

1.一次删一个

lst = ["a","b","c","d","e","f","g"]
del lst[2]
print(lst)

结果输出:

['a', 'b', 'd', 'e', 'f', 'g']


2.一次删一堆

lst = ["a","b","c","d","e","f","g"]
del lst[1:-1]
print(lst)

结果输出:

['a', 'g']


3.注意点

lst = ["a","b","c","d","e","f","g"]
res = lst[1:-1]
del res # 删除的是res这个变量 和 列表无关
print(lst)

结果输出:

['a', 'b', 'c', 'd', 'e', 'f', 'g']

 

pop

通过指定索引删除元素,若没有索引则移除最后那个 (推荐)

默认移除最后一个,如果指定第几个,便移除第几个。
传参数,传的是index。

lst = ['d','s','j']
# 不指定下标,默认删除最后一个
res = lst.pop()
print(res)
print(lst)

# 指定下标,删除具体某个元素
res = lst.pop(1)
print(res)
print(lst)

结果输出:

['d', 's', 'j']
['d', 'j']
['d']

 

remove

通过给予的值来删除,如果多个相同元素,默认删除第一个

lst = ["张三","李四","赵云","王麻子","赵云"]
res = lst.remove("赵云")
print(res)
print(lst)


切片删除

a = ['d','s','j']
del a[1:3]
print(a)

结果输出:

['d']


clear 清空列表

a = ['d','s','j']
a.clear()
print(a)

结果输出:

[]

 

列表的修改 ( 可切片 )

改单个值

lst = ["a","b","c","d","e","f","g"]
lst[1] = "hello"
print(lst)

结果输出:

['a', 'hello', 'c', 'd', 'e', 'f', 'g']

 

改多个值 

如果使用切片进行修改,要求数据必须是Iterable可迭代性数据

lst = ["孙悟空","猪八戒","白骨精"]
lst[1:4] = "你好"
print(lst)

结果输出:

['孙悟空', '你', '好']

 

改多个值(带有步长)

带有步长的切片修改,切出几个元素就修改几个元素,数量要一致.

lst = ["a","b","c","d","e","f","g"]
lst[::3] = "xyz" # 0 3 6
#lst[::3] = "ab"   #error
print(lst)

结果输出:

['x', 'b', 'c', 'y', 'e', 'f', 'z']

 

列表方法: 查

count: 计算列表中元素的数量
Index: 查看列表某个元素的位置下标

a = ['d','s','j']
print(a.index('s'))
a = ['d','s','d','x','y']
print(a)
print(a.count('d'))
print(a.count('x'))

输出结果:

1
['d', 's', 'd', 'x', 'y']
2
1

 

列表方法: 排序

sort:列表本身排序

默认从小到大排序。

a = [1,4,6,2,5]
print(a)
a.sort()
print(a)
a.sort(reverse=True)
print(a)
a = ['a','d','c']
print(a)
a.sort()
print(a)
a.sort(reverse=True)
print(a)

输出结果:

[1, 4, 6, 2, 5]
[1, 2, 4, 5, 6]
[6, 5, 4, 2, 1]
['a', 'd', 'c']
['a', 'c', 'd']
['d', 'c', 'a']

  
sort和sorted的区别:

1: sort是列表的方法, sorted是对一个序列数据对象的方法
2: sort改变了列表, sorted不改变数据结构本身

a = [1,4,6,2,5]
print(a)
print(sorted(a))
print(a)

结果输出:

[1, 4, 6, 2, 5]
[1, 2, 4, 5, 6]
[1, 4, 6, 2, 5]

 

列表的拼接 (同元组)

lst1 = ["张三","李四"]
lst2 = ["王五","赵六"]
res = lst1 + lst2
print(res)

结果输出:

['张三', '李四', '王五', '赵六']


列表的重复 (同元组)

lst1 = ["张三","李四"]
res = lst1 * 3
print(res)

结果输出:

['张三', '李四', '张三', '李四', '张三', '李四']

 

列表方法: 反转

reverse: 列表反转

a = ['d','s','j']
print(a)
a.reverse()
print(a)
a = [1,4,5,3]
print(a)
a.reverse()
print(a)

结果输出:

['d', 's', 'j']
['j', 's', 'd']
[1, 4, 5, 3]
[3, 5, 4, 1]

 

列表循环

a = ['d','s','j']
for item in a:
    print (item)

结果输出:

d
s
j

    
列表的嵌套

lst = ["a", "b","c",["d","e",[1, "f", "g", "h"],"i"]]
print(lst[3][2][1])
lst[3][2][2] = lst[3][2][2].upper()
print(lst)
lst[3][2][0] = lst[3][2][0] + 99
print(lst)

输出结果:

f
['a', 'b', 'c', ['d', 'e', [1, 'f', 'G', 'h'], 'i']]
['a', 'b', 'c', ['d', 'e', [100, 'f', 'G', 'h'], 'i']]

 

列表的深浅拷贝

a = 100
b = a
a = 200
print(b)

输出结果:

100

 

lst1 = [1,2,3]
lst2 = lst1
lst1.append(4)
print(lst2)

输出结果:

[1, 2, 3, 4]


1.浅拷贝

方法一 (推荐)

import copy
lst1 = [1,2,3]
lst2 = copy.copy(lst1)
lst1.append(10)
print(lst2)
print(lst1)

输出结果:

[1, 2, 3]
[1, 2, 3, 10]

 

方法二:

import copy
lst1 = [1,2,3]
lst2 = lst1.copy()
lst1.append(11)
print(lst1)
print(lst2)

输出结果:

[1, 2, 3, 11]
[1, 2, 3]

 

2.深拷贝

把所有层级的容器元素都单独拷贝一份,放到独立的空间中

import copy
lst1 = [1,2,3,[4,5,6]]
lst2 = copy.copy(lst1)
lst1[-1].append(77)
lst1.append(8888)
print(lst2)
print(lst1)

输出结果:

[1, 2, 3, [4, 5, 6, 77]]
[1, 2, 3, [4, 5, 6, 77], 8888]

 

import copy
lst1 = [1,2,3,[4,5,6]]
lst2 = copy.deepcopy(lst1)
lst1[-1].append(999)
print(lst2)
print(lst1)

输出结果:

[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5, 6, 999]]

 

其他容器的深拷贝

import copy
lst1 = (1,2,3,{"a":1,"b":[10,20]})
lst2 = copy.deepcopy(lst1)
lst1[-1]["b"].append(30)
print(lst1)
print(lst2)

输出结果:

(1, 2, 3, {'a': 1, 'b': [10, 20, 30]})
(1, 2, 3, {'a': 1, 'b': [10, 20]})

 

深浅拷贝总结:

浅拷贝:
    只拷贝一级容器中的所有元素独立出一个单独的空间。
深拷贝:
    把所有层级的容器中所有元素都单独拷贝一份,形成独立的空间。

 

posted @ 2022-10-26 00:02  屠魔的少年  阅读(7)  评论(0)    收藏  举报