Python基础学习Day5

1.列表(list)

Python 支持多种复合数据类型,可将不同值组合在一起。最常用的列表 ,是用方括号标注,逗号分隔的一组值。列表可以包含不同类型的元素,但一般情况下,各个元素的类型相同。

x=[10,20,88,10+2j,True,'xixi']#可以容纳不同数据类型
#列表是一种复合数据(数据容器)

1.1列表访问

访问方式与字符串一致,从0开始是第一个元素,若从右往左索引则第一个元素是-1,以此类推。

#访问类表中的值
#取出列表中的数据
y1=x[0]
y2=x[5]
y3=x[-2]
print(y1,y2,y3)


#列表索引(index,下标)不能超出索引范围(该行为称为越界)
x=[12,22,32,42,52,62]
print(x[0])
print(x[1])
print(x[2])
print(x[3])
print(x[4])
print(x[5])

for i in range(len(x)):
    print(i,x[i])
for el in x:
    print('num:',el)

1.2切片索引

利用下标来一次访问多个原列表内的值([::]),访问方式与字符串一样。

#切片索引
x=[11,22,33,44,55,66,77,88,99,100,110]
x2=x[3:5]#x2表示从x列表中的第4取到第5个,[3,5)
print('x2',x2)
x3=x[2:-2]#从左往右取值,从2对应的元素取到倒数第3个,左闭右开
print('x3',x3)
x4=x[-3:5]#从左往右取,如果切片的范围没有任何元素,则得到一个空的列表
print('x4',x4)
x5=x[1:100]
print('x5',x5)
x6=x[:4]#省略冒号之前的,就表示从第一个开始
print('x6',x6)
x7=x[1:]#省略冒号后面的数,就表示取到len()结束
print('x7',x7)
x8=x[1:8:2]#第二个冒号后面的数代表步长,[x[1],x[3],x[5],x[7]]
print('x8',x8)
x9=x[:8:2]#从头开始取,步长为2,[x[0],x[2],x[4],x[6]]
print('x9',x9)
x10=x[2::2]#从第三个开始取,步长为2,到结束[x[2],x[5],x[7],x[9],x[10]
print('x10',x10)
x11=x[::2]#从头开始取到最后一个,步长为3
print('x11',x11)
x12=x[::-2]
print('x12',x12)
x13=x[1:5:-1]
print('x13',x13)
x14=x[5:1:-1]
print('x14',x14)

1.3更新列表

使用append()对列表添加,新元素位于列表的最后一位,无法一次添加多个新元素进原列表。更新列表会修改原列表,这是深拷贝。

x=[10,20,30,40,50,60]
x2=x[2:5]
print('x',x)
print('x2',x2)
print(id(x),id(x2))#id不相同
print(id(100),id(100))
x2[0]=300
print('x2的下标对应的元素被修改后:',x2)
print('x2的下标对应的元素被修改后的x:',x)

切片是一个数值,不能直接赋值。

x=[1,2,3,4,5]
x[0]=100
print(x)
#x[1:3]=100无法运行,x[1:3]是取值,无法把一个数值赋值给取值
#x[]=为赋值,=x[]是取值

x=[11,99,'hello',True,None,5675,[89,3547]]#列表本身就是一种数据,所以列表里面可以有列表
print(x)
x2=x[3:-1]
print(x2)
x2[0]=99999
print(x,x2)

x3=x[3:]
print(x,x3)
x3[0]=100
print(x,x3)

列表切片的元素是一种浅拷贝过来的元素。
切片后,新列表中的元素和原列表中的切片范围的元素“长的一样”是通过浅拷贝得到的。

y=[000,92331,'hello',True,332,889876,[89,3547]]
y2=y[4:]
print(y,y2)
y3=y2[1]
print(y3)
y3=999999
print(y,y2,y3,sep='\n')


print("-------")
list=[10,20,30,40,[88,99]]
Qlist=list[2:]
print(Qlist)
print(list)
Qlist[1]=55
Qlist[2][1]=1
print(Qlist)
print(list)

1.4删除列表元素

可以使用del对列表的元素进行删除,直接赋空值(None,会在原列表中留下一个None值。

x=[10,20,30,40,50]
#x[2]=None
del x[2]
print(x)
#对x[2]直接赋空值,会在原列表中留下一个None值。

1.5列表的操作符

Python 表达式结果描述
len([1, 2, 3])3长度
[1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]组合
['Hi!'] * 4['Hi!', 'Hi!', 'Hi!', 'Hi!']重复
3 in [1, 2, 3]True元素是否存在于列表中
for x in [1, 2, 3]: print(x)1 2 3迭代
x=[[10,20],[20,30],90,100]
x2=[10,20]
print(x[0],x2)
re=x2 in x #x2变量中保存的数据,在x中有没有一样的元素(数据一样就行不一定非得是同一个元素)
print(re)

1.6嵌套

使用嵌套列表即在列表里创建其它列表

a = ['a', 'b', 'c']
n = [1, 2, 3]
x = [a, n]
print(x)#[['a', 'b', 'c'], [1, 2, 3]]
print(x[1][2])#['a', 'b', 'c']
print(len(x))

# x[2][3][4][5] x是一个列表,取出下标为2的元素,取出的元素又是一个列表,再取出这个列表下标为3的元素,取出的元素又是一个列表……
x=[1,2,[1,1,1,[23,[232,23445,212,567,[13,5,7,8,0]]]]]
x2=x[2][3]
print(x2)

1.7常用API

序号函数
1len(list)列表元素个数
2max(list)返回列表元素最大值
3min(list)返回列表元素最小值
4list(seq)将可迭代数据转换为列表(常见的官方提供的迭代数据有列表range)

序号方法
1list.append(obj)在列表末尾添加新的对象
2list.count(obj)统计某个元素在列表中出现的次数
3list.extend(seq)在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4list.index(obj)从列表中找出某个值第一个匹配项的索引位置
5list.insert(index, obj)将对象插入列表
6list.pop(index=-1)移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7list.remove(obj)移除列表中某个值的第一个匹配项
8list.reverse()反向列表中元素
9list.sort( key=None, reverse=False)对原列表进行排序: x.sort(key=lambda a:abs(a-3), reverse=False)
10list.clear()清空列表
11list.copy()复制列表
#API
x=[1,2,3,4,5,6]
print(len(x))
print(max(x))
print(min(x))


x=[10,11,10,11,10,11]
print(x.count(10))

#count底层的设计相当于下面代码的片段
number1=[10,20]
n=0
count=0
while n<len(x):
    count+=number1 in x[n:]
    n+=1


x=[10,20,30,40]
x2=[10,1,2,3,3]
x.extend(x2)#会直接修改x列表
print(x)
#x.extend(20)会报错,只能传入可迭代数据
#x.extend([11,22],[224,335]]也会报错,可以执行两次以达到目的

x=[12,23,34,45,56]
re=x.index(23)
print(re)

x=[22,33,44,55,66,77]
x.insert(2,999999)#将原本下标为2的数据后移
print(x)
x.insert(100,'xixi')#越界的情况下,插到开头或者结尾
print(x)
x.insert(len(x),'hqyj')
print(x)

x=[10,20,30]
re=x.pop()#移除指定下标元素并返回对应元素,默认移除最后一个元素,不可以越界
print(re)
print(x)
re=x.pop(1)
print(re)
print(x)

x=[11,12,23,12,35,67]
re=x.remove(12)#移除第一个匹配到的元素
print(re)
print(x)
# re=x.remove(100)#越界的下标不能运行,会报错
# print(x,'666')

x=[11,22,33,44]
print(id(x))
x.clear()#移除原x的内部数据,id不变
print(x,id(x))
x=[]#重新赋值为空,更换id
print(x,id(x))

x=[11,22,33,44]
x2=x.copy()
print('x:',x)
print('x2:',x2)
print(x is x2)
print(id(x),id(x2))
x2[0]=100#修改x2内部数据
print(x,x2)#看看两个列表是不是都修改了

x=[[11,22,33],10,20]
x2=x.copy()
x2[0][0]=200
print(x,x2)

x=[11,22,33,44]
x2=x[::-1]
print(x,x2)
x3=x.reverse()
print(x3)#x.reverse()无法返回,直接对原数列操作
print(x)

x=[3,6,2,1,4,9,8,7]
x.sort(key=lambda x:x**2,)
print(x)

2.元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号 ( ),列表使用方括号 [ ]。

2.1创建元组

一旦创建了元组,就不能修改其内容。这意味着不能向元组中添加或删除元素,也不能改变已有元素的值。这一点与列表不同,列表是可以修改的

创建元组很简单,只需将元素放在圆括号内,并用逗号分隔,元组的小括号可以省略

x=(10,20,30,'hqyj','hello')
print(x)

x=10,20,30,40,'nihao'#元组可以省略小括号
print(x)

a=100
x=a,#元组也是一种数据容器
print(x)

如果只有一个元素的元组,需要在元素后面加上一个逗号来明确这是一个元组

x=(10)#只有一个元素时,如果不加逗号代表括号运算符,不是元组
print(x)
x=10,#只要一个元素的元组时,在元素后面添加逗号
x=(10,)#只要一个元素的元组时,在元素后面添加逗号
print(x)

2.2访问元组

可以通过索引来访问元组中的元素,索引从 0 开始:

x=10,20,30
print(x[2])
print(x[-1])
print(x[1:])

2.3修改元组

元组(tuple)是不可变的数据类型,但如果元组中含有可变的对象(如列表或字典),则可以通过间接的方式修改这些对象的内容。

如果元组包含了一个列表或字典等可变类型的数据,虽然不能直接改变元组的内容,但可以修改这些可变对象中的元素。

也可以通过拼接的方法将多个元组进行合并,达到修改的目的。

# x[0]=6666
# print(x) 会报错,元组、字符串、数字不可修改

x=10
x=20
print(x)#x变量是可以重新赋值为新的数据,但是x中保存的数字是不能改变的

x=[10,20,30]
print(id(x))
x[0]=100
print(id(x))#id没有变,数字是最小的存在,唯一性

#若元组内存在列表等可修改变量类型时,可以修改该变量内的数据
x=(1,2,3,[44,55,66])
x[3][0]=999
print(x)

x=(10,20,'hello')
a,b,c=x
#a=x[0] b=x[1] c=x[2]
#a,b,c=(10,20,'hello')
print(a)
print(b)
print(c)

x=10,20
x1=30,40
x2=x+x1
print(x2)

2.4删除元组

虽然无法对原则内的元素进行删除,但可以使用del将整个元组删除。

x=(12,987,'hello world',[2,'hqyj',Ture])
print(x)
del x
print(x)#name 'x' is not defined

2.5元组运算符

与字符串一样,元组之间可以使用 +、+=和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

Python 表达式结果描述
len((1, 2, 3))3计算元素个数
(1, 2, 3)+(4, 5, 6)(1, 2, 3, 4, 5, 6)连接得到一个新的元组
('Hi!',) * 4('Hi!', 'Hi!', 'Hi!', 'Hi!')复制
3 in (1, 2, 3)True元素是否存在
for x in (1, 2, 3): print (x)1 2 3迭代

2.6元组常见API

序号方法描述
1len(tuple)返回元组中元素个数。
2max(tuple)返回元组中元素最大值。
3min(tuple)返回元组中元素最小值。
4tuple(list)将列表转换为元组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值