Python基础语法(列表,元组,字典)案例详解
【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!
博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!
吾等采石之人,应怀大教堂之心,愿大家奔赴在各自的热爱里…
本章节继续介绍python容器(列表,元组,字典),分享给刚学python的小伙伴,一起学习,共同进步
字符串详解:Python基础语法之字符串
前面学习的字符串可以用来存储一串信息,那么想一想,怎样存储咱们班所有同学的名字呢?
定义100个变量,每个变量存放一个学生的姓名可行吗?有更好的办法吗?
一.列表基础语法
- <1>列表的格式
- 变量A的类型为列表
namesList = ['xiaoWang','xiaoZhang','xiaoHua']
- 1
- 比C语言的数组强大的地方在于列表中的元素可以是不同类型的
testList = [1, 'a']
- 1
- <2>打印列表
namesList = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
print(namesList[0])
print(namesList[1])
print(namesList[2])
- 1
- 2
- 3
- 4
xiaoWang
xiaoZhang
xiaoHua
- 1
- 2
- 3
-
列表的循环遍历
-
使用for循环
-
为了更有效率的输出列表的每个数据,可以使用循环来完成
namesList = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
for name in namesList:
print(name)
- 1
- 2
- 3
xiaoWang
xiaoZhang
xiaoHua
- 1
- 2
- 3
使用while循环
- 为了更有效率的输出列表的每个数据,可以使用循环来完成
namesList = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
length = len(namesList)
i = 0
while i < length:
print(namesList[i])
i += 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
xiaoWang
xiaoZhang
xiaoHua
- 1
- 2
- 3
- 注意:这里顺便送大家一套2020最新企业Pyhon项目实战视频教程,点击此处,进来获取 跟着练习下,希望大家一起进步哦!
二.列表的相关操作
列表中存放的数据是可以进行修改的,比如"增"、“删”、“改”、“查”
- <1>添加元素("增"append, extend, insert)
- append
- 通过append可以向列表添加元素
# 定义变量A,默认有3个元素
A = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
print("-----添加之前,列表A的数据-----")
for tempName in A:
print(tempName)
# 提示、并添加元素
temp = input('请输入要添加的学生姓名:')
A.append(temp)
print("-----添加之后,列表A的数据-----")
for tempName in A:
print(tempName)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
-----添加之前,列表A的数据-----
xiaoWang
xiaoZhang
xiaoHua
请输入要添加的学生姓名:AAA
-----添加之后,列表A的数据-----
xiaoWang
xiaoZhang
xiaoHua
AAA
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- extend
- 通过extend可以将另一个集合中的元素逐一添加到列表中
# 定义变量a
a = [1, 2]
b = [3, 4]
a.append(b)
print(a)
- 1
- 2
- 3
- 4
- 5
[1, 2, [3, 4]]
- 1
# 定义变量a
a = [1, 2]
b = [3, 4]
a.extend(b)
print(a)
- 1
- 2
- 3
- 4
- 5
- 6
[1, 2, 3, 4]
- 1
- insert
- insert(index, object) 在指定位置index前插入元素object
a = [0, 1, 2]
a.insert(1, 3)
print(a)
- 1
- 2
- 3
[0, 3, 1, 2]
- 1
- <2>修改元素(“改”)
- 修改元素的时候,要通过下标来确定要修改的是哪个元素,然后才能进行修改
# 定义变量A,默认有3个元素
A = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
print("-----修改之前,列表A的数据-----")
for tempName in A:
print(tempName)
# 修改元素
A[1] = 'xiaoLu'
print("-----修改之后,列表A的数据-----")
for tempName in A:
print(tempName)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
-----修改之前,列表A的数据-----
xiaoWang
xiaoZhang
xiaoHua
-----修改之后,列表A的数据-----
xiaoWang
xiaoLu
xiaoHua
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- <3>查找元素("查"in, not in, index, count)
- 所谓的查找,就是看看指定的元素是否存在
- in, not in
- python中查找的常用方法为:
in(存在),如果存在那么结果为true,否则为false
not in(不存在),如果不存在那么结果为true,否则false
# 待查找的列表
nameList = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
# 获取用户要查找的名字
findName = input('请输入要查找的姓名:')
# 查找是否存在
if findName in nameList:
print('在字典中找到了相同的名字')
else:
print('没有找到')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
请输入要查找的姓名:AAA
没有找到
- 1
- 2
请输入要查找的姓名:xiaoWang
在字典中找到了相同的名字
- 1
- 2
- 说明:in的方法只要会用了,那么not in也是同样的用法,只不过not in判断的是不存在
- index, count
- index和count与字符串中的用法相同
Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束)
范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
str.index(str, beg=0, end=len(string))
- str – 指定检索的字符串
- beg – 开始索引,默认为0。
- end – 结束索引,默认为字符串的长度。
- 返回值:
如果包含子字符串返回开始的索引值,否则抛出异常。
a = ['a', 'b', 'c', 'a', 'b']
a.index('a', 1, 3) # 注意是左闭右开区间
- 1
- 2
Traceback (most recent call last):
File "D:/Phython/study/venv/Include/hello.py", line 2, in <module>
a.index('a', 1, 3) # 注意是左闭右开区间
ValueError: 'a' is not in list
- 1
- 2
- 3
- 4
a = ['a', 'b', 'c', 'a', 'b']
b = a.index('a', 1, 4)
print(b)
- 1
- 2
- 3
3
- 1
a = ['a', 'b', 'c', 'a', 'b']
B = a.count('b')
print(B)
- 1
- 2
- 3
2
- 1
- <4>删除元素("删"del, pop, remove)
- 类比现实生活中,如果某位同学调班了,那么就应该把这个条走后的学生的姓名删除掉;在开发中经常会用到删除这种功能。
列表元素的常用删除方法有: - del:
根据下标进行删除
- pop:
删除最后一个元素
- remove:
根据元素的值进行删除
- del Demo
movieName = ['加勒比海盗', '霍比特人', '速度与激情']
print('------删除之前------')
for tempName in movieName:
print(tempName)
del movieName[2]
print('------删除之后------')
for tempName in movieName:
print(tempName)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
------删除之前------
加勒比海盗
霍比特人
速度与激情
------删除之后------
加勒比海盗
霍比特人
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- pop Demo
movieName = ['加勒比海盗', '霍比特人', '速度与激情']
print('------删除之前------')
for tempName in movieName:
print(tempName)
movieName.pop()
print('------删除之后------')
for tempName in movieName:
print(tempName
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
------删除之前------
加勒比海盗
霍比特人
速度与激情
------删除之后------
加勒比海盗
霍比特人
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- remove demo
movieName = ['加勒比海盗', '指环王', '霍比特人', '速度与激情']
print('------删除之前------')
for tempName in movieName:
print(tempName)
movieName.remove('指环王')
print('------删除之后------')
for tempName in movieName:
print(tempName)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
------删除之前------
加勒比海盗
指环王
霍比特人
速度与激情
------删除之后------
加勒比海盗
霍比特人
速度与激情
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- <5>排序(sort, reverse)
- sort方法是将list按特定顺序重新排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。
- reverse方法是将list逆置。
a = [1, 4, 2, 3]
a.reverse()
print(a)
- 1
- 2
- 3
[3, 2, 4, 1]
- 1
a = [1, 4, 2, 3]
a.sort()
print(a)
- 1
- 2
- 3
[1, 2, 3, 4]
- 1
三.列表的嵌套
- 列表嵌套
- 类似while循环的嵌套,列表也是支持嵌套的
- 一个列表中的元素又是一个列表,那么这就是列表的嵌套
schoolNames = [['北京大学', '清华大学'],
['南开大学', '天津大学', '天津师范大学'],
['山东大学', '中国海洋大学']]
- 1
- 2
- 3
应用:一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配
#encoding=utf-8
import random
# 定义一个列表用来保存3个办公室
offices = [[],[],[]]
# 定义一个列表用来存储8位老师的名字
names = ['A','B','C','D','E','F','G','H']
i = 0
for name in names:
index = random.randint(0,2)
offices[index].append(name)
i = 1
for tempNames in offices:
print('办公室%d的人数为:%d'%(i,len(tempNames)))
i+=1
for name in tempNames:
print("%s"%name,end='')
print("\n")
print("-"*20)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
随机生成 每次执行代码不一样
办公室1的人数为:1
F
--------------------
办公室2的人数为:3
BCH
--------------------
办公室3的人数为:4
ADEG
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
四.元组
- Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
访问元组
aTuple = ('hello',10,20)
#访问元组
print(aTuple[0])
- 1
- 2
- 3
hello
- 1
修改元组
aTuple = ('hello',10,20)
#修改元组
aTuple[0] = 1
- 1
- 2
- 3
- 无法修改
Traceback (most recent call last):
File "D:/Phython/study/venv/Include/hello.py", line 3, in <module>
aTuple[0] = 1
TypeError: 'tuple' object does not support item assignment
- 1
- 2
- 3
- 4
- <3>count, index
- index和count与字符串和列表中的用法相同
a = ('a', 'b', 'c', 'a', 'b')
a.index('a', 1, 3) # 注意是左闭右开区间
- 1
- 2
Traceback (most recent call last):
File "D:/Phython/study/venv/Include/hello.py", line 2, in <module>
a.index('a', 1, 3) # 注意是左闭右开区间
ValueError: tuple.index(x): x not in tuple
- 1
- 2
- 3
- 4
案例详解
a = ('a', 'b', 'c', 'a', 'b')
print(a.index('a', 1, 4))
print(a.count('a'))
print(a.count('d'))
- 1
- 2
- 3
- 4
- 没有就返回0
3
2
0
- 1
- 2
- 3
五.字典介绍
想一想:
- 如果有列表
nameList = ['xiaoZhang', 'xiaoWang', 'xiaoLi'];
- 1
- 需要对"xiaoWang"这个名字写错了,通过代码修改:
nameList[1] = 'xiaoxiaoWang'
- 1
- 如果列表的顺序发生了变化,如下
nameList = ['xiaoWang', 'xiaoZhang', 'xiaoLi'];
- 1
- 此时就需要修改下标,才能完成名字的修改
nameList[0] = 'xiaoxiaoWang'
- 1
有没有方法,既能存储多个数据,还能在访问元素的很方便就能够定位到需要的那个元素呢?
- 另一个场景:学生信息列表,每个学生信息包括学号、姓名、年龄等,如何从中找到某个学生的信息?
studens = [[1001, "王bao强", 24], [1002, "马rong", 23], [1005, "宋x",24], ...]
- 1
- 软件开发中的字典
变量info为字典类型:
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}
- 1
- 字典和列表一样,也能够存储多个数据
- 列表中找某个元素时,是根据下标进行的
- 字典中找某个元素时,是根据’名字’(就是冒号:前面的那个值,例如上面代码中的’name’、‘id’、‘sex’)
字典的每个元素由2部分组成,键:值
。例如 ‘name’:‘班长’ ,'name’为键,'班长’为值
- 根据键访问值
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}
print(info['name'])
print(info['address'])
- 1
- 2
- 3
- 4
班长
地球亚洲中国北京
- 1
- 2
若访问不存在的键,则会报错:
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}
print(info['age'])
- 1
- 2
Traceback (most recent call last):
File "D:/Phython/study/venv/Include/hello.py", line 4, in <module>
print(info['age'])
KeyError: 'age'
- 1
- 2
- 3
- 4
- Demo
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}
age = info.get('age')
print(age)
- 1
- 2
- 3
- 4
None
- 1
在我们不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值:
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国北京'}
age = info.get('age', 18) # 若info中不存在'age'这个键,就返回默认值18
print(age)
- 1
- 2
- 3
- 4
18
- 1
六.字典的常见操作
- <1>查看元素
- 除了使用key查找数据,还可以使用get来获取数据
info = {'name': '卢本伟', 'age': 18}
print(info['age']) # 获取年龄
# print(info['sex']) # 获取不存在的key,会发生异常
print(info.get('sex')) # 获取不存在的key,获取到空的内容,不会出现异常
- 1
- 2
- 3
- 4
- 5
- 6
- 7
18
None
- 1
- 2
- <2>修改元素
- 字典的每个元素中的数据是可以修改的,只要通过key找到,即可修改
info = {'name': '卢本伟', 'id': 100, 'sex': 'f', 'address': '地球亚洲中国北京'}
newId = input('请输入新的学号')
info['id'] = int(newId)
print('修改之后的id为%d:' % info['id'])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
请输入新的学号200
修改之后的id为200:
- 1
- 2
- <3>添加元素
- demo:访问不存在的元素
info = {'name': '卢本伟', 'sex': 'f', 'address': '地球亚洲中国北京'}
print('id为:%d' % info['id'
- 1
- 2
- 3
Traceback (most recent call last):
File "D:/Phython/study/venv/Include/hello.py", line 3, in <module>
print('id为:%d' % info['id'])
KeyError: 'id'
- 1
- 2
- 3
- 4
如果在使用 变量名['键'] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素
- demo:添加新的元素
info = {'name': '卢本伟', 'sex': 'f', 'address': '地球亚洲中国北京'}
# print('id为:%d'%info['id'])#程序会终端运行,因为访问了不存在的键
newId = input('请输入新的学号')
info['id'] = newId
print('添加之后的id为:%s' % info['id'])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
请输入新的学号10
添加之后的id为:10
- 1
- 2
- <4>删除元素
- 对字典进行删除操作,有一下几种:
- del
- clear()
- demo:del删除指定的元素
info = {'name': '卢本伟', 'sex': 'f', 'address': '地球亚洲中国北京'}
print('删除前,%s' % info['name'])
del info['name']
print('删除后,%s' % info['name'])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
删除前,卢本伟
Traceback (most recent call last):
File "D:/Phython/study/venv/Include/hello.py", line 7, in <module>
print('删除后,%s' % info['name'])
KeyError: 'name'
- 1
- 2
- 3
- 4
- 5
- demo:del删除整个字典
info = {'name': 'monitor', 'sex': 'f', 'address': 'China'}
print('删除前,%s' % info)
del info
print('删除后,%s' % info)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Traceback (most recent call last):
File "D:/Phython/study/venv/Include/hello.py", line 7, in <module>
print('删除后,%s' % info)
NameError: name 'info' is not defined
删除前,{'name': 'monitor', 'sex': 'f', 'address': 'China'}
- 1
- 2
- 3
- 4
- 5
- demo:clear清空整个字典
info = {'name': 'monitor', 'sex': 'f', 'address': 'China'}
print('清空前,%s' % info)
info.clear()
print('清空后,%s' % info)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
清空前,{'name': 'monitor', 'sex': 'f', 'address': 'China'}
清空后,{}
- 1
- 2
字典常见方法补充
- <1>len()
- 测量字典中,键值对的个数
- <2>keys
- 返回一个包含字典所有KEY的列表
- <3>values
- 返回一个包含字典所有value的列表
- <4>items
- 返回一个包含所有(键,值)元祖的列表
- <5>has_key
(Python3 已取消)
- dict.has_key(key)如果key在字典中,返回True,否则返回False
info = {'name': '卢本伟', 'sex': 'f', 'address': 'China'}
#测量字典中,键值对的个数
print(len(info))
#返回一个包含字典所有KEY的列表
print(info.keys())
#返回一个包含字典所有value的列表
print(info.values())
#返回一个包含所有(键,值)元祖的列表
print(info.items())
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3
dict_keys(['name', 'sex', 'address'])
dict_values(['卢本伟', 'f', 'China'])
dict_items([('name', '卢本伟'), ('sex', 'f'), ('address', 'China')])
- 1
- 2
- 3
- 4
七.遍历
- 通过for … in … 我们可以遍历字符串、列表、元组、字典等
- 注意python语法的缩进
字符串遍历
列表遍历
元组遍历
#字符串遍历
a_str = "hello itcast"
for char in a_str:
print(char, end=' ')
print("----")
#列表遍历
a_list = [1, 2, 3, 4, 5]
for num in a_list:
print(num, end=' ')
print("----")
#元组遍历
a_turple = (1, 2, 3, 4, 5)
for num in a_turple:
print(num,end=" ")
print("----")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
h e l l o i t c a s t ----
1 2 3 4 5 ----
1 2 3 4 5 ----
- 1
- 2
- 3
字典遍历
- <1> 遍历字典的key(键)
- <2> 遍历字典的value(值)
- <3> 遍历字典的项(元素)
- <4> 遍历字典的key-value(键值对)
dict = {"name":"卢本伟","sex":"M"}
#遍历字典的key(键)
for key in dict.keys():
print(key)
print("---")
#遍历字典的value(值)
for value in dict.values():
print(value)
# 遍历字典的项(元素)
print("---")
for item in dict.items():
print(item)
print("---")
#遍历字典的key-value(键值对)
for key,value in dict.items():
print("key=%s,value=%s"%(key,value))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
name
sex
---
卢本伟
M
---
('name', '卢本伟')
('sex', 'M')
---
key=name,value=卢本伟
key=sex,value=M
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
想一想,如何实现带下标索引的遍历 ?
chars = ['a', 'b', 'c', 'd']
i = 0
for chr in chars:
print("%d %s"%(i, chr))
i += 1
- 1
- 2
- 3
- 4
- 5
0 a
1 b
2 c
3 d
- 1
- 2
- 3
- 4
enumerate()
- enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
chars = ['a', 'b', 'c', 'd']
for i,chr in enumerate(chars):
print("%d %s"%(i, chr))
- 1
- 2
- 3
- 4
0 a
1 b
2 c
3 d
- 1
- 2
- 3
- 4
非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!
2020.04.01 记录辰兮的第44篇博客 愿你们奔赴在自己的热爱里!
文章来源: blessing.blog.csdn.net,作者:辰兮要努力,版权归原作者所有,如需转载,请联系作者。
原文链接:blessing.blog.csdn.net/article/details/105239674
- 点赞
- 收藏
- 关注作者
评论(0)