文章目录
列表
列表使用方括号括起来的[],每个元素以逗号分割;
可以存储不同的数据类型数据
数组
特点:
li = []
li = [1, 2, 3, "HangZhou", "City", "College", ['I', 'Love', 'Python']]
sr = 'abcd'
li = list(sr)
print(li,type(li))
li1 = ['I']
li2 = ['Love', 'Python']
print(li1 + li2)
#['I', 'Love', 'Python']
print(li1 *3 )
li = ['C', 'i', 't', 'y', 'City', 'College', ['City', 'College']]
print(len(li)) # 7
print(li[0], li[-7]) # C C
print(li[:5]) # ['C', 'i', 't', 'y', 'City']
print(li[::-1]) # [['City', 'College'], 'College', 'City', 'y', 't', 'i', 'C']
print(li[4][1]) # i
print(li[6][1]) # College
1.增
.append() #
li = ['City', 'College']
print(id(li)) #1510909945864
li1 = ['a', 'b', 'c']
li.append(li1)
print(li, id(li)) #['City', 'College', ['a', 'b', 'c']] 1510909945864
sr = '城市学院'
li2 = []
for i in sr:
li2.append(ord(i))
print(li2)
#[22478, 24066, 23398, 38498]
.insert() #按索引添加
li = ['City', 'College']
li1 = ['a', 'b', 'c']
li.insert(1,li1)
print(li) #['City', ['a', 'b', 'c'], 'College']
.extend() #
li = ['City', 'College']
li1 = ['a', 'b', 'c']
li.extend(li1)
print(li)
#['City', 'College', 'a', 'b', 'c']
2.改
li = ['City', 'College']
li1 = ['a', 'b', 'c']
li.insert(1,li1)
print(li) #['City', ['a', 'b', 'c'], 'College']
li[2] = '666'
print(li) #['City', ['a', 'b', 'c'], '666']
li[2:5] = ['x', 'y', 'z']
print(li) #['City', ['a', 'b', 'c'], 'x', 'y', 'z']
3.删
.pop() #返回被删除的元素
#如果不指定索引,默认删除最后一个元素
#删除指定索引对应的元素
li = ['a', 'b', 'c', 'd', 'e']
print(li.pop(2)) # c
print(li) # ['a', 'b', 'd', 'e']
.remove() #移除第一次遇到的指定元素
li = ['a', 'b', 'c', 'd', 'e', 'city', 'e']
print(li.remove('e')) #None 没有返回值
print(li) #['a', 'b', 'c', 'd', 'city', 'e']
-del
li = ['a', 'b', 'c', 'd', 'e', 'city', 'e']
del li[5]
print(li)
#['a', 'b', 'c', 'd', 'e', 'e']
.clear()
li = ['a', 'b', 'c', 'd', 'e', 'city', 'e']
li.clear()
print(li)
#[] 清空列表
4.查 遍历
- 元素遍历
li=["a","b","c"]
for i in li:
print(i)
#a
#b
#c
- 索引遍历
li=["a","b","c"]
for i in range(len(li)):
print(li[i])
#a
#b
#c
- 枚举遍历
.enumerete() #对于一个可迭代的/可遍历的对象(如列表,字符串等)
#将其组成一个索引序列,利用它,我们可以同时获得索引和值
li = ['a', 'b', 'c']
for i in enumerate(li,2):
print(i)
(2, 'a')
(3, 'b')
(4, 'c')
- 堆和栈,用列表实现
- 其他操作
.count()#计数,查找元素出现的次数
.reverse()#反转
.sort()#排序,按照ascii排序
1.input()函数实现往空列表中添加元素,当输入"q"的时候,结束输入,并返回列表
li = []
ele = input('请输入元素')
li.append(ele)
while 'q' not in ele:
ele = input('请输入元素')
li.append(ele)
else:
print(li)
li = []
while True:
inp = input('请输入列表元素: \t')
if inp == 'q':
break
else:
li.append(inp)
print(li)
2.随机生成30个0-10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0, 3], [1, 4], … , [10, 5]]
import random
li = []
li2 = []
for i in range(30):
li.append(random.randint(0,10))
print(li)
sum = 0
for i in range(0,11):
li2.append([i,li.count(i)])
sum += li.count(i)
print(li2)
print(sum)
赋值
赋值是对对象的引用
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb = la
print(la) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
print(lb) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
print(id(la),id(lb)) # 2039160711048 2039160711048
print(la is lb) # True
la[5] = 'aaa'
print(la) # [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
print(lb) # [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
深浅拷贝
深拷贝会创建新对象,内容是原对象的引用
三种实现方法:
- 切面操作[:]
- 工厂函数list (li)
- copy模块内的copy函数
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb = la
lb2 = la[:]
print(lb2) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
print(id(la), id(lb2)) # 2115390023688 2115419799240
import copy
lb_copy = copy.copy(la)
print(lb_copy) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
print(id(la), id(lb_copy)) # 2115390023688 2115421295944
la.append('test') #添加原子类型不会影响lb_copy
print(la) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test']
print(lb_copy) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
import copy
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb_copy = copy.copy(la)
la[6][0] = 'bbb'
print(la) # [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]
print(lb_copy) # [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]
import copy
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb_copy = copy.copy(la)
la[6] = 'bbb'
print(la) # [1, 2, 3, 4, 5, 'a', 'bbb']
print(lb_copy) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
深拷贝
import copy
la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb_deepcopy = copy.deepcopy(la)
print(la, id(la))
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2450386351624
print(lb_deepcopy, id(lb_deepcopy))
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2450386352904
la[5] = 'aaa'
print(la) # [1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
print(lb_deepcopy) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
la[6][1] = 'bbb'
print(la) # [1, 2, 3, 4, 5, 'a', ['b1', 'bbb']]
print(lb_deepcopy) # [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
浅拷贝相当于我们只拷贝了一层,修改外层元素,会修改引用,让他们指向另一个位置;
修改嵌套列表的元素,列表地址没有发生变化,只想的还是同一个位置
深拷贝拷贝对象的所有元素,包括多层嵌套的元素。因此,是开辟了一个新的内存存储区,和数据源没有关系了
列表解析式
li = []
for x in range(10):
li.append(x)
print(li)
print([x for x in range(10)]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print([x for x in range(10) if x % 2 == 0]) # [0, 2, 4, 6, 8]
列表生成式,用来生成列表的特定的语法形式
sr = "城市学院"
print([ord(x) for x in sr]) #[22478, 24066, 23398, 38498]
print([x for x in sr]) #['城', '市', '学', '院']
格式:
[表达式 for 迭代元素 in 可迭代对象]
实现原理:
- 迭代[可迭代对象]中的每一个元素
- 每迭代一次的结果赋值给对应的迭代元素,在通过表达式运算得到一个新的值
- 最后所有通过表达式计算的值以一个列表的形式返回
三目运算符
y = 10
x = y + 1 if y>10 else y-1
print(x) #9
带过滤功能格式
[exp for iter_val in iter if_condtion]
li = []
for iter_val in iter:
if if_condtion: #判断条件
li.append(iter_val)
print(li)
name = ['Tom', 'Jack', 'Luck']
subject = ['Python', 'Java', 'C', 'C++']
li = []
for i in name:
for j in subject:
li.append([i, j])
print(li)
print([[i, j] for i in name for j in subject])
#[['Tom', 'Python'], ['Tom', 'Java'], ['Tom', 'C'], ['Tom', 'C++'], ['Jack', 'Python'], ['Jack', 'Java'], ['Jack', 'C'], ['Jack', 'C++'], ['Luck', 'Python'], ['Luck', 'Java'], ['Luck', 'C'], ['Luck', 'C++']]
元组
1.有序
2.可重复
3.不可更改
符号使用括号()
定义:
元组的创建
- 空元组的创建
- 单元组的创建 tp = (“abc”, )
- 多元素元组的创建,包含多种数据类型
- 多元素元组的创建,包含多种数据类型
- 拼接
- 重复
- 索引(偏移) 切片
1.查
- 索引查
- 切片查
- index()
tp = (1, 2, 3, 'a', 'b', ['aa', 'bb', 'cc', 'dd'])
print(tp.index('a')) #3
2.增 不能
3.改 不能
4.删
不能删除某个元素;但可以将整个元组删除
del tp
最大值、最小值
print(max(tp),min(tp))
遍历
元素遍历
索引遍历
枚举enumerate