一. 列表
1. 定义
列表,是由一系列按照特定顺序排列的元素组成的一个有序集合。其中可以包含字母,数字,或者其他任何元素,每一个元素之间不一定有关系。不过,在创建列表时,建议还是将相同类型的元素或者相互之间有关联的元素放在一个列表中。
鉴于包含的元素的数量,通常在给列表起名的时候,一般会以复数的形式出现。
# 创建一个关于汽车品牌的列表
cars = [\'大众\',\'丰田\',\'宝马\',\'捷豹\',\'奔驰\']
# 创建一个关于SMITH信息的列表
messages = [\'smith\',\'man\',29,\'teacher\',\'england\']
2. 列表的访问
列表是一个有序集合,所以可以通过访问列表中每个元素的位置或者索引来访问。
列表的索引值是从0开始的。
① 通过索引值访问列表元素
以上面的cars列表为例,分别访问第一个元素和最后一个元素
>>> cars[0]
\'大众\'
>>> cars[-1]
\'奔驰\'
② 已知列表中的元素值,求元素的索引值
>>> cars.index(\'大众\')
0
>>> cars.index(\'奔驰\')
4
3. 列表的修改
想要修改列表中的元素,只需要对相应的元素进行重新赋值即可
# 将列表cars中第二个元素的值修改成劳斯莱斯
>>> cars[1] = \'劳斯莱斯\'
>>> cars
[\'大众\', \'劳斯莱斯\', \'宝马\', \'捷豹\', \'奔驰\']
如果只知道元素的值,不知道索引值,那么可以使用index()方法,先找到元素的索引值,再进行修改
4. 列表的添加
① 在列表的末尾追加元素
# 列表cars的末尾追加一个新元素
>>> cars.append(\'法拉利\')
>>> cars
[\'大众\', \'劳斯莱斯\', \'宝马\', \'捷豹\', \'奔驰\', \'法拉利\']
② 在列表的特定位置插入元素
>>> cars.insert(1,\'帕加尼\')
>>> cars
[\'大众\', \'帕加尼\', \'劳斯莱斯\', \'宝马\', \'捷豹\', \'奔驰\', \'法拉利\']
③ 在列表的末尾扩展/合并另一个列表的元素值
# 将cars列表合并到messages列表的末尾
>>> messages.extend(cars)
>>> messages
[\'smith\', \'man\', 29, \'teacher\', \'england\', \'大众\', \'帕加尼\', \'劳斯莱斯\', \'宝马\', \'捷豹\', \'奔驰\', \'法拉利\']
注意:
方法append()和方法extend()都是将元素添加到列表的末尾,但两者是不同的
- append()方法在向目标列表添加元素时,不管是单个元素还是一个列表,都会被当作一个整体
- extend()方法则是将被追加列表的元素一一拆分,然后再追加到目标列表中
# append()追加列表
>>> messages.append(cars)
>>> messages
[\'smith\', \'man\', 29, \'teacher\', \'england\', [\'大众\', \'帕加尼\', \'劳斯莱斯\', \'宝马\', \'捷豹\', \'奔驰\', \'法拉利\']]
5. 列表的删除
① 使用del删除
>>> cars
[\'大众\', \'帕加尼\', \'劳斯莱斯\', \'宝马\', \'捷豹\', \'奔驰\', \'法拉利\']
>>> del cars[1]
>>> cars
[\'大众\', \'劳斯莱斯\', \'宝马\', \'捷豹\', \'奔驰\', \'法拉利\']
关键字del的本质是将变量从内容中删除,变量的定义或者使用就是放在内容中的,将其从内容中删除,后续变量就不可再使用了。所以在删除列表中的元素时,尽力不要使用del。
除了作为关键字,del还作为一个函数使用,作用是一样的
>>> del(cars[1])
>>> cars
[\'大众\', \'宝马\', \'捷豹\', \'奔驰\', \'法拉利\']
② 使用pop()方法弹出元素
>>> cars
[\'大众\', \'宝马\', \'捷豹\', \'奔驰\', \'法拉利\']
>>> popped = cars.pop(1)
>>> cars
[\'大众\', \'捷豹\', \'奔驰\', \'法拉利\']
>>> popped
\'宝马\'
使用方法pop()时,与其说是删除元素,不如说是将元素从原来的列表中弹了/取了出来,被弹出的元素依旧存在,只需要重新赋值给一个变量,即可再次使用。
③ 使用remove()方法移除
remove()方法是在只知道元素的值,索引值不知道的情况下使用的。
remove()方法只能移除目标元素第一次出现的值,如果目标元素存在多个,可以搭配循环来实现
>>> cars
[\'大众\', \'捷豹\', \'奔驰\', \'法拉利\']
>>> cars.remove(\'法拉利\')
>>> cars
[\'大众\', \'捷豹\', \'奔驰\']
④ 使用clear()方法清空列表
>>> cars
[\'大众\', \'捷豹\', \'奔驰\']
>>> cars.clear()
>>> cars
[]
6. 列表排序
6.1 永久性排序
列表使用sort()方法对列表进行永久性排序,如果指定参数,则使用指定的比较函数排序。
sort()方法语法:
list.sort(cmp = None,key = None,reverse = False)
-------------------------------------------------------------------
cmp:可选参数, 如果指定了该参数会使用该参数的方法进行排序
key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse:排序规则,reverse = True 降序, reverse = False 升序(默认)
① 无参数无比较函数:
>>> cars = [\'大众\',\'丰田\',\'宝马\',\'捷豹\',\'奔驰\']
>>> cars.sort()
>>> cars
[\'丰田\', \'大众\', \'奔驰\', \'宝马\', \'捷豹\']
② 指定cmp
③ 指定key
6.2 临时性排序
函数sorted()能够在保留列表原有顺序的基础上,同时对列表进行特定顺序的输出
函数sorted()语法:
sorted(list,iterable,cmp=None,key=None,reverse=False)
----------------------------------------------------------------
iterable:可迭代对象
cmp:比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse:排序规则,reverse = True 降序 , reverse = False 升序(默认)。
① 无参数无比较函数
>>> cars = [\'大众\',\'丰田\',\'宝马\',\'捷豹\',\'奔驰\']
>>> sorted(cars)
[\'丰田\', \'大众\', \'奔驰\', \'宝马\', \'捷豹\']
>>> cars
[\'大众\', \'丰田\', \'宝马\', \'捷豹\', \'奔驰\']
② 指定cmp
③ 指定key
6.3 倒着打印
reverse()方法:仅仅只是将列表的顺序倒着打印,而不对源顺序进行调整。
reverse()方法对于列表的修改是永久性的,但可以再次使用,使列表恢复原状
>>> cars = [\'大众\',\'丰田\',\'宝马\',\'捷豹\',\'奔驰\']
>>> cars.reverse()
>>> cars
[\'奔驰\', \'捷豹\', \'宝马\', \'丰田\', \'大众\']
7. 多维列表
多维列表的元素是列表,即列表里嵌套列表,属性遵循一维列表的规则,最常见的有二维列表和三维列表。
二维列表:
# 创建一个二维列表,元素为德国,美国和中国三个国家的汽车品牌
>>> cars = [[\'奥迪\',\'奔驰\',\'宝马\'],[\'雪佛兰\',\'凯迪拉克\',\'别克\'],[\'红旗\',\'吉利\',\'长城\']]
三维列表:
# 创建一个三维列表,元素为德国,美国和中国的一些信息
countries = [[[\'柏林\', \'慕尼黑\', \'斯图加特\'], [\'纽约\', \'华盛顿\', \'旧金山\'], [\'北京\', \'上海\', \'深圳\']], [[\'奥迪\', \'奔驰\', \'宝马\'], [\'雪佛兰\', \'凯迪拉克\', \'别克\'], [\'红旗\', \'吉利\', \'长城\']], [[\'西门子\', \'金介\', \'Mann\'], [\'苹果\', \'谷歌\', \'摩托罗拉\'], [\'华为\', \'小米\', \'Vivo\']]]
可以看出,三维列表的元素是二维列表,二维列表的元素是普通列表,以此类推,N维列表的元素则是N-1维列表
8. 列表的遍历
列表的遍历就是从头到尾依次获取列表中的元素,在遍历的过程中可以完成查询,处理等操作。
① 使用for循环遍历列表
>>> cars = [\'大众\',\'丰田\',\'宝马\',\'捷豹\',\'奔驰\']
>>> for car in cars:
print(car)
大众
丰田
宝马
捷豹
奔驰
在for循环中执行更多操作:
>>> for car in cars:
print(\'这是一辆%s牌的汽车。\\n\' % car)
这是一辆大众牌的汽车。
这是一辆丰田牌的汽车。
这是一辆宝马牌的汽车。
这是一辆捷豹牌的汽车。
这是一辆奔驰牌的汽车。
② 使用for循环和函数enumerate()遍历列表
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
enumerate()语法:
enumerate(list, [start=0])
还是以cars列表作为目标,查看for循环和函数enumerate()是如何实现遍历的?
>>> cars = [\'大众\',\'丰田\',\'宝马\',\'捷豹\',\'奔驰\']
>>> for index,car in enumerate(cars,start=1):
print(index,car)
1 大众
2 丰田
3 宝马
4 捷豹
5 奔驰
③ 使用函数range()和len()遍历列表
除了使用for循环和函数enumrate()的结合,来实现既可以输出数据,又可以表明数据下标的功能,数字函数range()和len()也可以实现同样的功能
函数range():可以生成一系列的数字,从起始值开始,到终止值结束,不包括终止值,通常会结合循环使用。具体语法:
range(start,end,step)
start:起始值,不写时默认为0
end:终止值
step:步长,不写时默认为1
>>> for i in range(1,10,2):
print(i)
1
3
5
7
9
函数len():返回对象(字符,列表,元组,字典等)的长度
>>> cars
[\'大众\', \'丰田\', \'宝马\', \'捷豹\', \'奔驰\']
>>> len(cars)
5
利用数字函数range()和len()实现列表的遍历,既可以输出数据下标,又可以不输出,全看自身需求
>>> cars
[\'大众\', \'丰田\', \'宝马\', \'捷豹\', \'奔驰\']
>>> for i in range(len(cars)):
print(i,cars[i])
0 大众
1 丰田
2 宝马
3 捷豹
4 奔驰
④ 使用while循环遍历列表
>>> cars
[\'大众\', \'丰田\', \'宝马\', \'捷豹\', \'奔驰\']
>>> i = 0
>>> while i < len(cars):
print(cars[i])
i+=1
大众
丰田
宝马
捷豹
奔驰
⑤ 多维列表的遍历
多维列表的遍历和普通列表的遍历方法是一样的,只不过多了一层循环嵌套
# 二维列表的遍历
>>> cars = [[\'奥迪\',\'奔驰\',\'宝马\'],[\'雪佛兰\',\'凯迪拉克\',\'别克\'],[\'红旗\',\'吉利\',\'长城\']]
>>> for country_cars in cars:
for car in country_cars:
print(car)
奥迪
奔驰
宝马
雪佛兰
凯迪拉克
别克
红旗
吉利
长城
9. 列表切片
切片,顾名思义就是将序列中的一部分切下来,获得一个新的序列。
切片适用于字符串,列表,元组,和字典等,是Python序列的重要操作之一。
要创建切片,则要指定需要的第一个元素和最后一个元素的索引值,和range()函数中的索引值使用一 样,切片使用中的索引依旧不包含最后一个元素。
# 取列表cars的前三个元素
>>> cars = [\'大众\',\'丰田\',\'宝马\',\'捷豹\',\'奔驰\']
>>> cars1 = cars[0:3]
>>> cars1
[\'大众\', \'丰田\', \'宝马\']
# 不指定起始索引,默认从头开始读取
>>> cars2 = cars[:3]
>>> cars2
[\'大众\', \'丰田\', \'宝马\']
# 不指定终止索引,默认读取到末尾
>>> cars3 = cars[3:]
>>> cars3
[\'捷豹\', \'奔驰\']
# 既不指定初始索引,也不指定种植索引,相当于复制
>>> cars4 = cars[:]
>>> cars4
[\'大众\', \'丰田\', \'宝马\', \'捷豹\', \'奔驰\']
索引值除了是正值之外,还可以是负值,从-1开始,书写的时候,依旧是小值在前,大值在后
# 取列表的倒数第二个和倒数第三个元素
>>> cars
[\'大众\', \'丰田\', \'宝马\', \'捷豹\', \'奔驰\']
>>> cars5 = cars[-3:-1]
>>> cars5
[\'宝马\', \'捷豹\']
# 不指定起始索引,默认从头读取
>>> cars6 = cars[:-1]
>>> cars6
[\'大众\', \'丰田\', \'宝马\', \'捷豹\']
# 不指定终止索引,默认读取到末尾
>>> cars7 = cars[-3:]
>>> cars7
[\'宝马\', \'捷豹\', \'奔驰\']
列表切片之后的序列,依旧还是列表,所以列表的各种格则依旧遵循
遍历切片:
>>> cars
[\'大众\', \'丰田\', \'宝马\', \'捷豹\', \'奔驰\']
>>> cars1 = cars[1:3]
>>> cars1
[\'丰田\', \'宝马\']
>>> for car in cars1:
print(car)
丰田
宝马
二. 元组
三. 字典
列表:
一、列表操作
"""
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
比如,列出班里所有同学的名字,就可以用一个list表示:
stus = [‘xiaohei‘,‘xiaobai‘,‘xiaohuang‘,‘cxdser‘]
索引(下标、角标)从0开始,0 1 2 3 4 5 6...。最后一个元素的下标可以写-1
name = ‘xiaohei,xiaobai,xiaohuang‘ 用字符串表示名字,但是多了不好查找
id = 1
#数组、list、array 都是指列表
"""
创建列表
stus = [‘xiaohei‘,‘xiaobai‘,‘xiaohuang‘,‘xiaobai‘,‘cxdser‘]
增加
stus.append(‘曹操‘)#在list末尾增加一个元素
print(‘append在list末尾增加一个元素:‘,stus)
stus.append(‘曹仁‘)#在list末尾增加一个元素
print(‘append在list末尾增加一个元素:‘,stus)
stus.insert(3,‘曹洪‘)#在指定位置添加元素
print(‘指定在下标3位置添加元素:‘,stus)
stus.insert(1000,‘曹纯‘)#如果你指定的下标不存在,那么就是在末尾添加
print(‘指定不存在的下标位置添加元素:‘,stus)
修改
stus[0]=‘曹休‘ #指定下标位置修改元素
print(‘[X]指定下标位置修改元素:‘,stus)
查看
print(‘查看整个列表:‘,stus) #查看整个列表
print(‘查看指定下标的元素:‘,stus[-1]) #查看指定下标的元素
print(stus.count(‘hhaha‘)) #查看某个元素在这个里面的个数,如果该元素不存在,那么返回0
print(stus.index(‘xiaobai‘)) #找到这个元素的下标,如果有多个,返回第一个,如果找一个不存在的元素,会报错
list操作
stus = [‘xiaohei‘,‘xiaobai‘,‘xiaohuang‘,‘cxdser‘,‘xiaohei‘]
stus.pop() #默认删除最后一个元素,如果指定下标,那么删除指定的元素
print(‘pop删除最后一个元素:‘,stus)
stus.remove(‘xiaohei‘) #删除list里面的一个元素
print(‘remove删除指定元素:‘,stus)
del stus[0] #删除指定下标的元素
print(‘del删除指定元素:‘,stus)
stus.clear() #清空整个list
print(‘clear清空整个list:‘,stus)
stus.reverse() #反转list
print(‘reverse反转整个list:‘,stus)
nums = [9,31,345,12,457,2352,12143,2321]
nums.sort(reverse=True) #排序,默认排序是升序,如果指定了reverse=True就是按照降序拍
print(nums)
nums.sort() #排序,默认排序是升序,如果指定了reverse=True就是按照降序拍
print(nums)
多维数组
二维数组 三维数组
two_nums = [123,456,[789,10,11]] #二维数组列表
print(two_nums[2][1]) #查看10
three_nums = [123,456,[789,10,11,[‘hahaha‘,‘1234‘]]]
print(three_nums[2][3][0]) #查看haha
a = [1,2,3]
b = [4,5,6]
a.extend(b) #合并两个list,将b合并到a中
print(‘合并后的列表‘,a)
print(b)
二、列表循环和切片
列表循环
如果直接for循环一个list的时候,那么每次循环的值都是这个list里面的元素
names = [‘haha‘,‘hehe‘,‘heihei‘]
for name in names:
print(name)
切片
nums = [1,2,3,4,5,6,7,8,9,10]
print(nums[-1:-8:-1])#步长
步长是正数的话从左往右取
步长是负数的话从右往左取
切片同样适用于字符串,字符串也有下标
title=‘今 天 发 苹 果 ‘
print(title[:4])
for i,t in enumerate(nums): #enumerate可以同时循环下标和值
print(i,t)
就是list取值的一种方式
print(nums[2:4])
print(nums[:6])#如果切片前面一个值不写的话,从开头取
print(nums[3:])##如果切片后面的值不写的话,取到末尾
print(nums[:])#如果前面的值和后面的值都不写的话,那么全取过来
切片是顾头不顾尾
三、非空即真
非空即真
非0即真
print(1>2)
a=1
b=2
if a==b:
print(‘xxx‘)
字典:
一、字典操作
d = { ‘name‘:‘曹操‘,
‘age‘:18,
‘sex‘:‘男‘,
‘addr‘:‘昌平区‘,
‘money‘:10000000 ,
‘shengao‘:‘200‘
}
d.pop(‘shengao‘)#删除某个key
print(‘pop删除指定key:‘,d)
d.popitem()#随机删除一个
print(‘popitem随机删除一个:‘,d)
del d[‘shengao‘]
print(‘指定key进行删除:‘,d)
d.clear()#清空字典
print(‘clear清空字典:‘,d)
print(‘获取到字典所有的key:‘,d.keys())#获取到字典所有的key
print(‘获取到所有的values:‘,d.values())#获取到所有的values
d.has_key(‘addr‘) #python2里面字典有这个方法,有没有这个key
if ‘addr‘ in d: #判断key是否在这个字典里头
print(‘addr‘)
print(‘把字典的k和v转成一个二维数组:‘,d.items())#是把字典的k和v转成一个二维数组
for k,v in d.items():#遍历字典并将k、v值打印出来
print(k,v)
res = list(d.items()) #把字典转成列表
print(d.items())
print(res[0]) #打印指定字段
for k in d: #用循环遍历字典,性能好
print(k,d.get(k)) #打印k、V值,返回指定键的值,如果值不在字典中返回default值
类型转换
int()#int类型
str()#转成字符
list()#转成list
d_list = str(d)
print(d_list)
二、字典嵌套
stus = {
‘ybq‘: {
‘age‘: 18,
‘sex‘: ‘男‘,
‘addr‘: ‘昌平区‘,
‘money‘: 10000000,
‘jinku‘: {
‘建行卡‘: 80000,
‘工商卡‘: 800000,
‘招商卡‘: 8000000
}
},
‘tlx‘: {
‘age‘: 19,
‘sex‘: ‘女‘,
‘addr‘: ‘昌平区‘,
‘money‘: 10000000,
‘huazhuangpin‘: [‘chanle‘,‘haha‘]
},
‘mpp‘: {
‘age‘: 19,
‘sex‘: ‘女‘,
‘addr‘: ‘昌平区‘,
‘money‘: 10000000,
"bag": {
‘lv‘: ‘一车‘,
‘鳄鱼‘:10
}
},
‘lcy‘:{
‘age‘:18,
‘sex‘:‘男‘,
‘addr‘:‘昌平区‘,
‘money‘: 10000000,
‘jinku‘:{‘建行卡‘: 80000}
},
}
print(‘stus:‘,stus)
print(‘ybq:‘,stus[‘ybq‘])
print(‘age:‘,stus[‘ybq‘][‘age‘])
print(‘jinku:‘,stus[‘ybq‘][‘jinku‘].values())
jk = stus[‘ybq‘][‘jinku‘].values()
print(‘sum:‘,sum(jk))
sum_money = 0
for money in jk:
sum_money = sum_money + money
print(‘sum_money:‘,sum_money)
print(‘打印haha:‘,stus[‘tlx‘][‘huazhuangpin‘][1])
print(‘打印一车:‘,stus[‘mpp‘][‘bag‘][‘lv‘])