python系列
python第一章(上)
python第一章(下)
python第二章
python第三章(下)
列表
前言
- 列表与列表操作
- 数值列表
- 序列转函数
一、列表与列表操作
列表定义
- 列表(list)用来有序存放一组相关数据,以便进行统一的处理。
Python中,将一组数据放在一对方括号“[]”中即定义了一个列表。
列表访问
- 列表元素按序号访问
s=[9,8,7,6,5,]
print(s[1])
print(s[-3])
- 运行截图
列表存放
- 可以存放一组成绩
scores=[98,95,85,60,78]
- 可以存放一组人名
names=["张三",'李四','王麻子']
- 可以存放一个学生基本信息
student=['张三','18','江西南昌']
- 可以放若干学生基本信息
students=[['张三','18','江西南昌'],['李四','19','云南昆明']]
- 可以嵌套列表
player1=["张三",90]
player2=["李四",80]
player3=["王麻子",95]
player4=["老刘",99]
players=[player4,player3,player2,player1]
print(players)
- 运行截图
列表操作
- 列表元素有序存放,并且可变。支持修改、添加和删除操作。
修改元素
- 列表名[索引] = 新值
names=["李白","张飞","刘备","王安石","孙悟空"]
print(names)
names[0]='黄蓉'#修改第一个元素
print(names)
- 运行截图
- 通过赋值交换元素
names=["李白","张飞","刘备","王安石","孙悟空"]
print(names)
names[0],names[-2]=names[-2],names[0]#通过赋值交换元素
print(names)
- 运行截图
添加元素
尾部追加------append方法
names=["李白","张飞","刘备","王安石","孙悟空"]
print(names)
names.append("段誉")
print(names)
- 运行截图
指定位置元素插入------insert方法
names=["李白","张飞","刘备","王安石","孙悟空"]
print(names)
names.insert(1,"玉皇大帝")
print(names)
- 运行截图
删除元素
按索引删除元素----del命令
names=["李白","张飞","刘备","王安石","孙悟空"]
print(names)
del names[-2]
print(names)
- 运行截图
按索引删除元素----pop方法
names=["李白","张飞","刘备","王安石","孙悟空"]
print(names)
names.pop(2)
print(names)
names.pop()
print(names)
- pop后面参数缺省时,默认删除最后一个元素
- 运行截图
按值删除元素-----remove方法
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
print(names)
names.remove("刘备")
print(names)
names.remove("李白")
print(names)
- 若有两个元素一样,则删除索引值较小的那一个
- 运行截图
其他操作
方法 | 描述 |
---|---|
len() | 统计和返回指定列表的长度,即列表中元素的个数(len(列表)) |
in和not in | 用来判断指定的元素是否在列表中(元素 in(not in)列表) |
.index() | 用来在列表中查找指定的元素,如果找到返回第一个元素对应的索引;如果找不到,会直接报错。(列表.index(元素)) |
.count() | 用来统计并返回列表中指定元素的个数(列表.count(元素)) |
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
print("names长度为",len(names))
print("李白在列表里面吗","李白" in names)
print("张三在列表里面吗","张三" in names)
print("张三不在列表里面吗","张三" not in names)
print("王安石的索引值为",names.index("王安石"))
print("列表里有几个李白",names.count("李白"))
- 运行截图
遍历列表
用range函数遍历
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
for i in range(len(names)):
print(names[i])
- 运行截图
直接元素遍历
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
for i in names:
print(i)
- 运行截图
列表排序
sort方法
- sort原地排序,改变原来的表
- 若列表嵌套,则按第一个元素为关键字排序
- sout后面参数缺省按升序,
- 参数里"reverse="的值为True则降序
ls=[2,8,5,4,6,9,2,1]
print(ls)
ls.sort()
print(ls)
ls.sort(reverse=True)
print(ls)
ls=[(5,2),(2,9),(7,2),(9,8),(1,8),]
print(ls)
ls.sort()
print(ls)
- 运行截图
sorted函数排序
- sorted命令的使用和参数含义和sort方法一致。 但sorted命令生成新的有序列表,不改变原来的列表。
列表切片
-
列表切片和字符串切片操作 类似,直接指定切片的起始索引、终止索引和切片方式。
-
字符串中关于索引和切片方式的规定都适用于列表切片。这里不再操作
列表[起始索引 :终止索引 :n]
列表扩充
- 列表的扩充是将两个列表合并成一个新的列表。
"+"运算
ls=[2,8,5,4,6,9,2,1]
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
sh=names+ls
print(sh)
- “+”运算将两个列表连接生成一个新列表,而不改变参与运算的列表本身。
- 运行截图
extend方法
- 将参数列表添加至原列表中。
ls=[2,8,5,4,6,9,2,1]
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
names.extend(ls)
print(names)
- 运行截图
"*"运算
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
ls=names*2
print(ls)
- 与“+”运算类似,“*”运算也生成新列表、而不改变参与运算的列表本身。
- 运行截图
列表复制
copy方法
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
ls=names.copy()
print(ls)
- ls和names是两个独立的空间
- 运行截图
赋值方法
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
ls=names
print(ls)
ls.append('七五')
print(names)
- ls和names共享空间
- 也不能说复制,应该是叫取别名更贴近。
- 运行截图
列表删除
清空
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
del names[:]
print(names)
- 经过删除“所有元素”的del操作后,列表中不包含任何元素,但是仍保留其列表的本质。
- 运行截图
删除
names=["李白","张飞","刘备","李白","王安石","孙悟空"]
del names[]
print(names)
- del后直接跟列表名,则将彻底删除该列表对象!
- 运行截图
数值列表
- 之前讲过input()从键盘输入后返回的是字符串
- 用eval可以转换成列表
ls=input("please enter some nums")
print(type(ls))
ls=input("please enter some nums")
print(type(ls))
ls=eval(input("please enter some nums"))
print(type(ls))
- 运行截图
- 还可以用list方法转换成列表
ls=input("please enter some nums")
ls=list(ls)
print(type(ls))
- 运行截图
数值列表简单计算
- min()求最小元素
- max()求最大元素
- sum()求和
ls=[2,5,8,9,7,4,1]
print(min(ls))
print(max(ls))
print(sum(ls))
- 运行截图
列表生成式
- 列表 = [循环变量相关表达式 for 循环变量 in range函数]
lim=[]
for i in range(1,10):
lim.append(i**2)
print(lim)
num=[i**2 for i in range(1,10)]
print(num)
- 运行截图
- 例子,请根据该列表用列表生成式生成包含学生姓名的列表。
ls=[['张三','18','江苏南京'],['李四','19','山东济南']]
name=[item[0] for item in ls]
print(ls)
print(name)
- 运行截图
- 也可以进行嵌套
ls=[i*j for i in range(1,3) for j in range(1,5)]
print(ls)
- 运行截图
- 上面的嵌套代码相当于
for i in range(1,3):
for j in range(1,5):
ls.append(i*j)
print(ls)