列表使用方括号括起来的[],每个元素以逗号分割;
可以存储不同的数据类型数据
特点:
是一个有序的
可以重复的
可变类型
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”, )多元素元组的创建,包含多种数据类型多元素元组的创建,包含多种数据类型 拼接重复索引(偏移) 切片不能删除某个元素;但可以将整个元组删除
del tp最大值、最小值
print(max(tp),min(tp))遍历
元素遍历
索引遍历
枚举enumerate