Python学习5

python学习5

数据类型

列表

在这里插入图片描述

1.列表的定义与访问

列表的定义与创建

  • 列表的格式
namelist = []   #定义一个空的列表
print(namelist,type(namelist))  #[] <class 'list'>
namelist = ["张三","李四","王五"]

#比C语言的数组强大的地方在于列表中的元素可以是不同类型的
testList = [1, 'a', True, 2.3, 1] #元素内容可以重复
  • 通过list()创建列表
a = list()  #创建一个空的列表对象
print(a)    #[]
a = list(range(10)) #将range所定义的数据作为列表元素 [0,9)
print(a)    #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a = list(range(2,-3,-1)) #[2, 1, 0, -1, -2]
print(a)
  • 通过推导式创建列表
a = [x*2 for x in range(5)] #循环创建多个元素
操作名称操作方法举例
访问列表中的元素通过下标直接访问print(list[0])
列表的切片使用[::]list1[2:5:2]
遍历列表通过for循环for i in list1:print(i)
  • 打印列表
nameList = ['xiaoming','xiaohong','xiaozhang']
print(nameList[0])
print(nameList[1])
print(nameList[2])
  • 列表的循环遍历
#为了更有效率的输出列表的每个数据,可以使用循环来完成
namelist = ["小张","小王","小李"]
for name in namelist:
    print(name)
2.常用操作

常用操作:len()、max()、min()、sum()

操作名称操作方法
获取列表长度len()
获取列表元素最大值max()
获取列表元素最小值min()
其它类型对象转换成列表list()
# (1) len() 获取列表元素个数
namelist = ["小张","小王","小李","小赵"]
print(len(namelist))    #4

i = 0
while i < len(namelist):
    print(namelist[i])
    i += 1

#(2) max() 和 min() 获取列表中最大和最小的元素
list1 = [3,2,1]
list2 = ["aa","bb","cc"]
#list1 = [False,2.0,30,"aa"]    #max和min函数调用时会报错,字符串和数值无法比较
list1 = [0,False,2.0,30]
print(max(list1))   #30
print(min(list1))   #0

#(3) sum() 对全部为数值型元素的列表求和
list1 = [10,20,30,2.0,True]
print(sum(list1))   #63.0

增/删/改/查

操作名称操作方法举例
【增】新增数据到列表尾部使用append方法list1.append(5)
【增】列表的追加使用extend方法list1.extend(list2)
【增】列表的加法操作+list3 = list1 + list2
【增】列表数据插入insert方法list1.insert(1, 3)
【删】列表的删除del :我们通过索引删除指定位置的元素
remove:移除列表中指定值的第一个匹配值。如果没找到的话,会抛异常
del list1[0]
list1.remove(1)
【删】弹出列表尾部元素使用pop方法list.pop()
【改】跟新列表中的数据通过下标原地修改list1[0] = 8
【查】列表成员关系in 、not in2 in list1
【查】指定区间某元素的牵引index方法list.index(“a”,1,4)
【查】列表中元素出现次数count方法list.count(“c”)
【排】列表的排序sort方法list.sort()
【排】列表的反转reverse方法list.reverse()
#增
#1.append()方法
namelist = ["小张","小王","小李","小明"]
print("-"*6+"增加前,名单列表的数据"+"-"*6)
for name in namelist:
    print(name,end=",")

nametemp = input("\n请输入学生姓名:")
namelist.append(nametemp)   #在末尾追加一个元素

print("-"*6+"增加后,名单列表的数据"+"-"*6)
for name in namelist:
    print(name,end=",")

#2.extend扩展
a = [1,2]
b = [3,4]
a.append(b)   #将列表当作一个元素,加入到a列表中    [1, 2, [3, 4]]
print(a)

a.extend(b)   #将列表中每个元素,逐一追加到a列表中
print(a)

#3.+连接
list1 = [10,20,30]
list2 = [40,50]
res = list1 + list2
print(res,id(res))  #[10, 20, 30, 40, 50] 1872099723776
print(list1,id(list1))  #[10, 20, 30] 1872144236928

list1.append(list2)
print(list1,id(list1))  #[10, 20, 30, [40, 50]] 1623135238528

#4.insert插入
a = [0,1,2]
a.insert(1,3)   #第一个变量表示下标,第二个表示元素(对象)
print(a)        #指定下表位置插入元素 [0, 3, 1, 2] 

#5.*重复 (了解)
list1 = [1,2,3]
list2 = list1 * 3
print(list2)    #[1, 2, 3, 1, 2, 3, 1, 2, 3]
#删
movieName =  ["速度与激情","指环王","复仇者联盟","加勒比海盗","指环王","美国队长"]

print("----删除前,电影列表的数据----")
for name in movieName:
    print(name,end=",")

print()
#1.del
del movieName[1]    #在指定位置删除一个元素,没有返回值
print(movieName)    #['速度与激情', '复仇者联盟', '加勒比海盗', '指环王', '美国队长']

#2.pop弹出
movie = movieName.pop()       #默认弹出末尾最后一个元素,有返回值(被弹出的那个元素)
print("被pop弹出的元素:",movie)

movie = movieName.pop(-2)     #弹出指定位置的元素,有返回值(被弹出的那个元素)
print("被pop弹出的元素:",movie)

#3.remove移除
movieName.remove("指环王")     #直接删除指定“内容”的元素,但只删除匹配到的第一个
movieName.remove("指环王2")    #删除不存在的元素,报错。
#改
namelist = ["小张","小王","小李","小明"]
print("-----修改前,名单列表的数据-----")
for name in namelist:
    print(name)

namelist[2] = "小红"
print("-----修改后,名单列表的数据-----")
for name in namelist:
    print(name)
#查
#1.[in],[not in]

namelist = ["小张","小王","小李","小明"]
findName = input("请输入你要查找的学生姓名:")
if findName in namelist:
    print("在学员名单中找到了相同的名字")
else:
    print("没有找到")

#2.index
mylist = ["a","b","c","a","b"]
print(mylist.index("a",1,4))    #可以查找指定下标范围的元素,并返回找到对应数据的下标
print(mylist.index("a",1,3))    #范围区间m左闭右开 [1,3)

#3.count
print(mylist.count("a"))        #统计某个元素出现次数

#4.排序和反转 sort 、 reverse
a = [1,4,2,3]
print(a,id(a))  #[1, 4, 2, 3] a的地址没有改变
a.reverse()                     
print(a,id(a))  #[3, 2, 4, 1] a的地址没有改变

a.sort()                #升序
print(a,id(a))          #a的地址没有改变
a.sort(reverse=True)    #降序
print(a,id(a))          #a的地址没有改变
3.列表的嵌套
  • 列表嵌套
    类似while循环的嵌套,列表也是支持嵌套的
    一个列表中的元素又是一个列表,那么这就是列表的嵌套
namelist = []   #一维空列表

namelist = [[],[],[]]   #有3个元素的坑列表,每个元素都是一个空列表

zhangsan = ["张三",20,"男"]
lisi = ["李四",22,"女"]
wangwu = ["王五",23,"男"]

namelist = [zhangsan,lisi,wangwu]   #二维列表
print(namelist)

"""
[['张三', 20, '男'],   #[0][0],[0][1],[0][2]  
 ['李四', 22, '女'],   #[1][0],[1][1],[1][2]
 ['王五', 23, '男']]   #[2][0],[2][1],[2][2]
"""

print(namelist[0])      #通过索引,获取到的第一个元素是一个列表
print(namelist[0][0])   #通过第二个中括号的索引,获取的是第一个列表中的第一个元素

for person in namelist:
    for i in person:
        print(i,end=",")
    print()
4.浅拷贝和深拷贝

变量赋值

#变量赋值
num1 = [1,2,3]
num2 = num1          #num1将地址值复制给了num2
num2.append(4)       #所以num2修改了里面的内容,num1取出来的内容也就变了
print("num1:",num1,id(num1))    
print("num2:",num2,id(num2))

浅拷贝

#浅拷贝
num1 = [10,[2,3]]
num2 = num1.copy()   #将num1所指向的数据内容(地址值),复制了一份给num2

#num2.append(4)       #修改num2,num1不受影响
print("num1:",num1,id(num1))   #num1和num2地址值不同
print("num2:",num2,id(num2))

#num1[0] = 8          #修改num1,相当于修改了地址指向,num2不受影响
print("num1[0]:",num1[0],id(num1[0]))
print("num2[0]:",num2[0],id(num2[0]))
print("num1[1]:",num1[1],id(num1[1]))
print("num2[1]:",num2[1],id(num2[1]))

深拷贝

import copy
num1 = [10,[2,3]]
num2 = copy.deepcopy(num1) #将num1所指向的数据元素,复制了一份给num2
# num1[-1].append(8) #所以,修改num1的列表元素中的内容,num2中对应的列表元素也变了

print("num1中列表的地址:",id(num1[-1]),"\nnum2中列表的地址:",id(num2[-1]))
#说明列表中的”列表元素“没有复制元素内容,仅仅复制的是地址。

print("num1:",num1,id(num1))
print("num2:",num2,id(num2))
print("num1[0]:",num1[0],id(num1[0]))
print("num2[0]:",num2[0],id(num2[0]))
print("num1[1]:",num1[1],id(num1[1]))
print("num2[1]:",num2[1],id(num2[1]))

小结

  • 浅拷贝: 只能copy列表的一级元素,复制了嵌套的可变数据类型的地址
  • 深拷贝: 能够copy列表所有层级的元素,复制了嵌套的可变数据类型元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值