python列表与元组

it2022-05-05  113

文章目录

python列表与元组格式化格式化字符串%号格式化和占位符 format格式字符串位置映射 列表1、定义:2、特点:3、列表的创建:4、列表的常用方法**5、列表的常见操作**6、列表解析式7、列表生成式8、赋值与深浅拷贝赋值深浅拷贝深浅拷贝对比 元组1、定义:2、特点:3、元组的创建(1)空元组的创建(2)单元素元组的创建(3)多元素元组的创建 4、元组的常见操作5、多维元组

python列表与元组

格式化

print()函数查看帮助文件

>>> help(print) Help on built-in function print in module builtins: print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream.

以逗号隔开的元素一起输出会以元组形式输出

>>> a,b,c,*d = 1,2,3,4,5,6 >>> a 1 >>> b 2 >>> c 3 >>> d [4, 5, 6]

语法格式:

print(value,...,sep=' ',end='\n',file=sys.stdout,flush=False)

等价于

print(value1,value2,value3,...,valuen,sep=' ',end='\n',file=sys.stdout,flush=False) >>> a,b,c,*d = 1,2,3,4,5,6 >>> print(a,b,c,d) 1 2 3 [4, 5, 6] >>> print(a,b,c,d,sep='$') 1$2$3$[4, 5, 6] >>> x = 666 >>> import sys >>> sys.stdout.write(str(x)) 6663 >>> y = 66 >>> sys.stdout.write(str(y)) 662

输出格式化:

name = "Kate" age = 20 print("his name is %s, his age is %d." % (name, age)) print("his name is", name, ',his age is', age, '.') print("his name is " + name + ' his age is ' + str(age) + '.')

格式化字符串

%号格式化和占位符

格式描述%d有符号的整数(十进制)%s字符串%c字符及ASCII码%o无符号八进制整数%x/%X无符号十六进制整数%e/%E浮点数,科学记数法%f浮点数%u格式化无符号整型%g/%G根据值的大小决定使用%f或%e%p用十六进制数格式化变量的地址

%格式化字符串,用%匹配参数,注意个数一一对应

>>> "%d%%" % 100 '100%'

%格式化和format格式化,字符串对齐

format格式字符串

位置映射

print("name:{}, age:{}".format('Tom', 18)) #输出结果:name:Tom, age:18 print("name:{}, age:{}, {address}".format('Tom', 18, address='Hangzhou')) #输出结果:name:Tom, age:18, Hangzhou #address这类要放在关键字后面 print('第一个元素是:{0[0]},第二个元素是:{0[1]},第三个元素是:{0[2]}'.format(('www.', 'google.', 'com'))) #输出结果:第一个元素是:www.,第二个元素是:google.,第三个元素是:com print('第一个元素是:{0[0]},第二个元素是:{0[1]},第三个元素是:{0[2]},第四个元素是:{1[0]},第五个元素是:{1[1]}'.format(('www.', 'google.', 'com'),('baidu.','com'))) #输出结果:第一个元素是:www.,第二个元素是:google.,第三个元素是:com,第四个元素是:baidu.,第五个元素是:com

字符串和数字的id都是不可更改的

列表

1、定义:

列表是用方括号括起来的[ ],每个元素以逗号分隔;可以储存不同的数据类型数据

2、特点:

是一个有序的可以重复的可变类型

3、列表的创建:

创建空列表 li = [] print(type(li)) #输出结果:<class 'list'> 创建多元列表 li = [1, 2, 3, "abcd", "city", "college", ['i', 'love', 'python']] print(type(li)) #输出结果:<class 'list'>

4、列表的常用方法

(1)拼接

li1 = ['i'] li2 = ['love', 'python'] print(li1, li2) #输出结果:['i'] ['love', 'python']

(2)重复

li2 = ['love', 'python'] print(li2 * 3) #输出结果:['love', 'python', 'love', 'python', 'love', 'python']

(3)索引(偏移)

li = ['c', 'i', 't', 'y', 'city', 'college', 'zhejiang', ['city', 'college', 'zhejiang']] print(len(li)) print(li[0], li[-7]) print(li[:5]) print(li[:-1]) print(li[4][1]) print(li[7][1]) ''' 输出结果: 8 c i ['c', 'i', 't', 'y', 'city'] ['c', 'i', 't', 'y', 'city', 'college', 'zhejiang'] i college '''

(4)强转

sr = 'abcd' li = list(sr) print(li, type(li)) #输出结果:['a', 'b', 'c', 'd'] <class 'list'>

5、列表的常见操作

append() li = ['city', 'college'] print(id(li)) li1 = ['a', 'b', 'c'] li.append(li1) print(li, id(li)) #输出结果:2542289494920 #['city', 'college', ['a', 'b', 'c']] 2542289494920 sr = '城市学院' li = [] for i in sr: li.append(ord(i)) print(li) #输出结果:[22478, 24066, 23398, 38498] expend() li = ['city', 'college'] li1 = ['a', 'b', 'c'] li.extend(li1) print(li) #输出结果:['city', 'college', 'a', 'b', 'c'] 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) li[2:6] = ['x', 'y', 'z'] print(li) #输出结果:['city', 'college', 'x', 'y', 'z'] li[5] = '666' print(li) #输出结果:['city', 'college', 'a', 'b', '666']

pop() (如果不指定索引,默认删除最后一个元素;删除指定索引对应的元素) li = ['a', 'b', 'c', 'd', 'e'] print(li.pop(2)) print(li) #输出结果:c #['a', 'b', 'd', 'e'] remove() (移除第一次遇到的指定元素) li = ['a', 'b', 'c', 'd', 'e', 'city', 'e'] print(li.remove('e')) print(li) #输出结果:None #['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) #输出结果:[]

sorted() (排序,默认正序,加入reverse =True,则表示倒序) #正序 num =[11,55,88,66,35,42] print(sorted(num)) -->数字排序 name =["xiaowu","little-five","James"] print(sorted(name)) -->字符串排序 #输出为:[11, 35, 42, 55, 66, 88] #['James', 'little-five', 'xiaowu'] #倒序 num =[11,55,88,66,35,42] print(sorted(num,reverse=True)) #输出为:[88, 66, 55, 42, 35, 11]

遍历

元素遍历 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 ''' 枚举遍历 (用enumerate(),对于一个可迭代的/可遍历的对象(如列表,字符串等),enumerate()将其组成一个索引序列,利用它,我们可以同时获得索引和值) li = ['a', 'b', 'c'] for i in enumerate(li,2): print(i) ''' 输出结果: (2, 'a') (3, 'b') (4, 'c') ''' #同上 li = ['a', 'b', 'c'] for index,value in enumerate(li,2): print(index,value)

堆和栈,用列表实现

其他操作

计数,count(),查找元素出现的次数反转,reverse() (内部元素必须得是同一种数据类型,不然无法进行比较) li = list('abcd') print(li) li.reverse() print(li) ''' 输出结果: ['a', 'b', 'c', 'd'] ['d', 'c', 'b', 'a'] ''' 排序,sort() (按照ASCII码值排序) li = list('abcd') print(li) li.sort(reverse=True) print(li) ''' 输出结果: ['a', 'b', 'c', 'd'] ['d', 'c', 'b', 'a'] '''

例题:

# 1、input()函数实现往空列表中添加元素,当输入"q"的时候,结束输入,并返回列表. li = [] while 1: inp = input('请添加元素:') if inp == 'q': break else: li.append(inp) print(li) ''' 输出结果: 请添加元素:a 请添加元素:b 请添加元素:c 请添加元素:q ['a', 'b', 'c'] ''' # 随机生成30个0-10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0,3],[1,4],...[10,5]] import random rand_int = [] result_li = [] for i in range(30): rand_int.append(random.randint(0, 10)) print(rand_int) sum = 0 for i in range(0, 11): result_li.append([i, rand_int.count(i)]) sum += rand_int.count(i) print(result_li) print(sum) ''' 输出结果: [4, 1, 4, 3, 6, 8, 9, 9, 0, 5, 1, 2, 5, 6, 3, 4, 6, 10, 7, 5, 1, 2, 10, 8, 10, 6, 7, 8, 4, 2] [[0, 1], [1, 3], [2, 3], [3, 2], [4, 4], [5, 3], [6, 4], [7, 2], [8, 3], [9, 2], [10, 3]] 30 '''

笔记:在python中的random.randint(a,b)用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b,下限必须小于上限。

6、列表解析式

li = [] for x in range(10): li.append(x) print(li) print([x for x in range(10)]) print([x for x in range(10) if x % 2 == 0]) ''' 输出结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 2, 4, 6, 8] '''

7、列表生成式

列表生成式,用来生成列表的特定语法形式 sr = '城市学院' print([ord(x) for x in sr]) ''' 输出结果: [22478, 24066, 23398, 38498] '''

格式:

[表达式 for 迭代元素 in 可迭代对象]

实现原理:

迭代[可迭代对象]中的每一个元素每迭代一次的结果直接赋值给对应的迭代元素,在通过表达式运算得到一个新的值最后所有通过表达式计算的值以一个列表的形式返回。

带过滤功能

[exp for iter_val in iter if if_condtion]

**三目运算符 **

y = 10 x = y + 1 if y > 10 else y - 1 print(x) #输出结果:9 y = 12 x = y + 1 if y > 10 else y - 1 print(x) #输出结果:13 for嵌套 name = ['Tom''Jack', 'Lucy'] subject = ['Python', 'Java', 'C', 'C++'] li = [] for i in name: for j in subject: li.append([i, j]) print(li) ''' 输出结果: [['Tom', 'Python'], ['Tom', 'Java'], ['Tom', 'C'], ['Tom', 'C++'], ['Jack', 'Python'], ['Jack', 'Java'], ['Jack', 'C'], ['Jack', 'C++'], ['Lucy', 'Python'], ['Lucy', 'Java'], ['Lucy', 'C'], ['Lucy', 'C++']] ''' #同上 print([[i, j] for i in name for j in subject])

8、赋值与深浅拷贝

赋值
定义:赋值是对对象的引用 la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb = la print(la) print(lb) print(id(la)) print(id(lb)) ''' 输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 1720122811528 1720122811528 '''

**赋值:**原文件和赋值文件是同一个东西(内容一样,id也一样),原文件的改变会引起赋值文件的改变

深浅拷贝

浅拷贝会创建新对象,内容是原对象的引用

三种实现方法

1、切片操作[ : ] la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb = la lb2 = la[:] print(id(la)) print(id(lb2)) ''' 输出结果: 2147844957320 2147845785416 ''' 2、工厂函数list(li)

copy模块内的copy函数

import copy la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb_copy = copy.copy(la) print(la, id(la)) print(lb_copy, id(lb_copy)) ''' 输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2080865809416 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2080865810696 ''' import copy la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb_copy = copy.copy(la) la.append('test') print(la) print(lb_copy) ''' 输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test'] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] ''' import copy la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb_copy = copy.copy(la) print(la, id(la)) print(lb_copy, id(lb_copy)) la[6][1] = 'aaa' print(la) print(lb_copy) ''' 输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2477357691912 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2477357693192 [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']] [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']] '''

**浅拷贝:**拷贝文件和原文件是两个不同的东西(内容一样,id不一样),原文件内容的浅层改变(元组内所有元素除了元组内元组元素)不会影响拷贝文件的内容,具体见深浅拷贝对比

深拷贝

import copy la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb_deepcopy = copy.deepcopy(la) print(la, id(la)) print(lb_deepcopy, id(lb_deepcopy)) la[6][1] = 'aaa' print(la) print(lb_deepcopy) ''' 输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2171730097224 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2171730098504 [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] '''
深浅拷贝对比

​ 浅拷贝相当于我们只拷贝了一层,修改外层元素,会修改引用,让它们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置。

​ 深拷贝拷贝对象的所有元素,包括多层嵌套的元素;是开辟了一个新的内存储存区,和数据源没有关系了。

实例对比: #浅拷贝 import copy la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb_copy = copy.copy(la) print(la, id(la)) print(lb_copy, id(lb_copy)) la[6][1] = 'aaa' print(la) print(lb_copy) ''' 输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2477357691912 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2477357693192 [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']] [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']] ''' #深拷贝 import copy la = [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] lb_deepcopy = copy.deepcopy(la) print(la, id(la)) print(lb_deepcopy, id(lb_deepcopy)) la[6][1] = 'aaa' print(la) print(lb_deepcopy) ''' 输出结果: [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2171730097224 [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2171730098504 [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']] [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] '''

元组

1、定义:

Python 的元组与列表类似,不同之处在于元组的元素不能修改;元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。符号使用()

2、特点:

有序可以重复不可更改

3、元组的创建

(1)空元组的创建

tp = ()

(2)单元素元组的创建

注意:需要在单元素后面添加逗号

tp = () print(type(tp)) tp1 = ('abc') print(type(tp1)) yp2 = ('abc',) print(type(yp2)) ''' 输出结果: <class 'tuple'> <class 'str'> <class 'tuple'> '''
(3)多元素元组的创建

包含多种数据类型:

拼接重复索引(偏移) 切片

4、元组的常见操作

增(不行)删,删除某个元素,不行;但可以全部删除 tp = (1, 2, 3, 'a', 'b', 'c', ['aa', 'bb', 'cc']) print(id(tp)) del tp tp = (1, 2, 3, 'a', 'b', 'c', ['aa', 'bb', 'cc']) print(id(tp)) del tp tp = (1, 2, 3, ['aa', 'bb', 'cc']) print(id(tp)) ''' 输出结果: 2036590771008 2036590771008 2036591743688 '''

注意:删完之后重新赋值,若内容和删之前的一样,则id不变;若内容改变,则id改变

改,不行,元组不能修改 tp = (1, 2, 3, 'a', 'b', 'c', ['a', 'b', 'c']) print(tp) print(tp[2]) print(tp[6]) tp[6][2] = 'bb' print(tp) ''' 输出结果: (1, 2, 3, 'a', 'b', 'c', ['a', 'b', 'c']) 3 ['a', 'b', 'c'] (1, 2, 3, 'a', 'b', 'c', ['a', 'b', 'bb']) ''' tp = (1, 2, 3, 'a', 'b', 'c', ['a', 'b', 'c']) tp[2] = 33 print(tp) #输出结果:报错(原因:元组不可修改) 查,可以 tp = (1, 2, 3, 'a', 'b', 'c', ['a', 'b', 'c']) print(tp.index('a')) #输出结果:3 tp = (1, 2, 3, 'a', 'b', 'c', ['aa', 'bb', 'cc']) print(tp[6].index('bb')) #输出结果:1 最大值、最小值 print(max(tp), min(tp))

遍历

元素遍历 tp = ('a', 'b', 'c') for i in tp: print(i, end=" ") #输出结果:a b c 索引遍历 tp = ('a', 'b', 'c') for i in range(len(tp)): print(tp[i], end=" ") #输出结果:a b c 枚举遍历enumerate tp = ('a', 'b', 'c') for i in enumerate(tp, 2): print(i) ''' 输出结果: (2, 'a') (3, 'b') (4, 'c') '''

5、多维元组

二维元组 tp = ((1, 2, 3), (4, 5, 6), (7, 8, 9)) print(tp[2][1]) #输出结果:8 三维元组 tp = (((1, 2, 3), (4, 5, 6), (7, 8, 9)), ((11, 22, 33), (44, 55, 66), (77, 88, 99)), ((111, 222, 333), (444, 555, 666), (777, 888, 999))) print(tp[2][1][2]) #输出结果:666


最新回复(0)