Python 列表及其应用
列表
Python 序列的基础操作
1.序列的索引
从左往右:0 1 2 3 4
从右往左:-1 -2 -3 -4
2.序列相加
Python中列表的功能相当强大,两个列表的拼接直接相加即可:
list1 = ["炒酸奶","红烧肉"]
list2 = ["鱼香肉丝","烤冷面"]
print(list1+list2)
得到结果:
['炒酸奶', '红烧肉', '鱼香肉丝', '烤冷面']
3.序列相乘
得到一个重复次数的列表:
list1 = ['Hello']
print(list1*3)
得到
['Hello', 'Hello', 'Hello']
4.元素检查
语法格式:
value in sequence
如果在列表中,则返回Ture,与之相对的是not in,若不在列表返回True,反之则False。
5.切片※
语法格式:
sname [start:end:step]
#start 为开始位置,不指定则默认0
#end 表示截止位置,不指定则默认为序列长度
#step 步长,不指定则连续访问
!易错点辨析!
如果是list1 = list2则该拷贝是一种浅拷贝,仅仅是一种指针形式由list1指向2,而将切片列表中省略只留[:],如:list3[:]表示复制整个名称为list3的序列。
列表的计算与应用
1.列表函数
- list() 将序列强制转化成列表
- str() 序列转换为字符串
- sum()求和
- sort(),sorted()排序,会重点说明。
- reversed()直接翻转列表
- enumerate()将序列组合为索引序列
list(data)举例
list(range(10,20,2))
得到列表
[10,12,14,16,18]
关于sort()和sorted(),先讨论sort()函数,其基本用法:
listname.sort(key= ,reverse= )
- listname.sort是排序函数的使用
- key提取关键字,比如key=str.lower表示在排序是不区分大小写,因为默认状态下对英文字符串排序先排大写再排小写,这与ASCII码有关
- reverse如果指定为True,则排序后会再翻转列表
sorted()在用法上与其完全一致,唯一不同点是sorted()会建立一个原列表的副本,该副本为排序后的列表,还是相当于深拷贝与浅拷贝的概念。
2.列表的访问
其访问形式类似于C++中的数组形式,如:
list1 = ["烤面筋","里脊扒饼","炸鲜奶"]
print(list1[2])
输出结果为
炸鲜奶
3.列表的遍历
① 直接使用for循环
list1 = ["烤面筋","里脊扒饼","炸鲜奶"]
for item in list1:
print(item)
② 使用for+enumerate()
使用组合可以同时输出索引值和元素内容
list1 = ["烤面筋","里脊扒饼","炸鲜奶"]
for index,item in enumerate(list1):
print(index+1,item)
输出:
1 烤面筋
2 里脊扒饼
3 炸鲜奶
4.列表元素的添加修改和删除
添加有三种方法:
- append() 列表末尾添加
- extend() 列表末尾添加一个列表,注意内部一定要加[ ]
- insert()某一元素前插入元素,执行效率较低不推荐使用。
修改元素直接赋值即可,删除元素使用del,如:
list1 = ["烤面筋","里脊扒饼","炸鲜奶"]
del list1[-1]
print(list1)
输出结果:
['烤面筋', '里脊扒饼']
如果要将一个不确定位置只确定元素值进行删除则使用remove()函数,要注意上面的del不是一个函数而是一条语句,它是索引式的删除。
list1 = ["烤面筋","里脊扒饼","炸鲜奶"]
list1.remove("炸鲜奶")
print(list1)
5.列表的统计计算
- count() 计数
- index()获取指定元素首次出现的位置
- sum()求和
6.列表推导式
语法格式:
listname = [Expression for var in LIST]
- Ex 计算表达式
- var 循环变量
- LIST 计算范围
筛选条件列表:
newlist = [Expression for var in list if condition]
元组
元组——tuple在形式上以()和,表示,在内容上任何类型的内容都可以放在一个元组中,通常元组用于保存程序中不可修改的内容,创建元组时直接赋值即可。
下列两种形式都是元组:
food = "水饺","灌汤包"
food = ("韩国炸鸡",)
下例则只是定义一个字符串:
food = ("韩国炸鸡")
在这里有一个和列表相同用法的转换方式:
tuple(data)
对符合元组的访问类似于C++中的二维数组形式:
food = ('abc',28,('炒酸奶','烤面筋'))
print(food[2])
('炒酸奶', '烤面筋')
print(food[2][0])
炒酸奶
print(food[2][1])
烤面筋
①元组元素的修改:
元组中的元素是无法直接修改的,但我们可以通过元组的重新赋值、连接组合进行修改,注意,元组只能和元组进行组合,除此之外的其他组合都会报错;数组连接时如果连接的数组只有一个元素一定不要忘记后面的逗号
②元组推导式:
与列表几乎完全一致,把[ ]改为()即可,但元组推导式的结果不是一个元组或列表,而是一个生成器对象,转换为元组使用tuple(),转换为列表则使用list()
字典
1.字典的创建和删除
dictionary = {'key1':'value1','key2':'value2',...,}
很容易想到字典的关键在于“键-值对”,“键”是索引,“值”即是键索引的内容。
引入创建字典的函数:dictionary = dir(zip(list1,list2)),list1做键,2做值,如果list1和list2的长度不同,则最后的结果长度与最短的一致,例:
name = ['张三','李四','王五']
age = ['19','20','18']
dictionary = dict(zip(name,age))#转换为字典,如果不用dict转换则其保持不可读的生成器模式
print(dictionary)
输出结果:
{'张三': '19', '李四': '20', '王五': '18'}
也可以通过给定的键值对创建字典
dictionary = dict(key1=value1,key2=value2,...,)
还可以使用函数fromkeys()创建只有键的空字典
name = ['张三','李四','王五']
dictionary = dir.fromkeys(name)
print(dictionary)
输出:
{'张三': None, '李四': None, '王五': None}
使用dictionary.clear删除字典元素。
2.字典的访问——键值对
判断访问的方法有两种:
- if判断处理
dictionary = {'张三': '19', '李四': '20', '王五': '18'}
print(dictionary['张三'] if '张三' in dictinoary else '字典无此人')
- get()指定获取
dictionary.get(key,[default])
3.字典的遍历
Python提供了items()函数用于字典的遍历:
for item in dictionary.items():
print(item)
这样得到的将是一个元组,若想获取各个具体的键和值,可以使用下列代码:
dictionary = {'张三': '19', '李四': '20', '王五': '18'}
for key,value in dictionary.items():
print(key,"的年龄是",value)
执行结果:
张三 的年龄是 19
李四 的年龄是 20
王五 的年龄是 18
Python还提供了values()和keys()方法专门获得值和键,用法与上述遍历一致。
4.添加、修改和删除字典元素
- 添加元素格式:
dictionary[key] = value #会添加到末尾
- 修改元素:
格式与添加的格式完全一致,只需给它直接赋新的value,当元素存在时即相当于修改功能
- 删除元素(这里直接介绍开发中最保险的方法——加入条件判断)
dictionary = {'张三': '19', '李四': '20', '王五': '18'}
if '李四' in dictionary:
del dictionary['张三']
print(dictionary)
5.字典推导式
推导式我们已经遇到了很多,字典推导式依旧和前面保持一致,直接上代码格式:
import random
randomdict = {i:random.randint(10,100) for i in range(1,5)} #创建字典
print(randomdict)
本文地址:https://blog.csdn.net/tomatoin/article/details/107416648