一、序列:列表,元组,字符串,字节序列
# 列表:用于存储其值可变的表
# 元组:用于存储值固定不变的表
# 字符串:包含若干字符的序列数据,s=“123abc”
# 字节序列:包含若干字节的序列数据,s=b”abc”
#
<一>、序列的内置函数
通过内置函数len()、max()、min()、sum()可以获取序列的长度、所有元素最大值、元素最小值
<二>、序列索引
(1)正序(下标为正整数) 0表示第1个元素,1表示第2个元素,2表示第3个元素,以此类推;
(2)倒序(下标为负整数) -1表示最后1个元素,-2表示倒数第2个元素,-3表示倒数第3个元素,以此类推
格式:sequence_name[i]
<三>、切片操作,适用于列表、元组、字符串、range对象等类型。(在range时总结过)
s=[1,2,3,4,5,6,7,8,9]
print(s[1:4])
##[2, 3, 4]
print(s[::-1]) #从右往左,两个冒号
##[9, 8, 7, 6, 5, 4, 3, 2, 1]
<四>、序列的连接和重复操作
通过连接符+可以连接两个序列而形成的新的序列对象。
通过重复操作符号*可以重复一个序列n次
<五>、元素索引的获取-index
使用序列对象的index()方法获取指定元素首次出现的下标,若列表对象中不存在指定元素,则抛出异常
<六>、可迭代对象,使用内置函数isinstance()可以判定一个对象是否是可迭代的对象。
import collections.abc
print(isinstance((1,2,3),collections.abc.Iterable))
##True
print(isinstance("123",collections.abc.Iterable))
##True
print(isinstance(123,collections.abc.Iterable))
##False
#for循环实现了自动迭代可迭代对象的功能
for i in "123":
print(i)
<七>、序列的排序操作,内置函数sorted()
# sortd(iterable,key=None,reverse=False)
# 其中,key用于计算比较键值的函数,例如key=str.low
s=(1,2,3,9,56,8,67,1,2,9)
print(sorted(s))
##[1, 1, 2, 2, 3, 8, 9, 9, 56, 67]
<八>、序列封包与解包
#把多个值赋给一个变量时,Python会自动的把多个值封装成元组,称为序列封包
a=1,2,3
print(a)
##(1, 2, 3)
b=[1,2],[3,4],(2,3),'def'
print(b)
##([1, 2], [3, 4], (2, 3), 'def')
#序列解包:当一个序列(列表、元组、字符串等)直接赋给多个变量时,会把序列中的各个元素依次赋值给每个变量,要求元素的个数与变量个数相同
a,b,c,d="1234"
print("a={},b={},c={},d={}".format(a,b,c,d))
##a=1,b=2,c=3,d=4
#部分序列解包
#当我们在序列解包时,只想解出部分元素时,可以在变量的左边加“ * ”,该变量就会变成列表,保存多个元素
a,b,c,d,e=[*[1,2,3],"de",(4,5)]
print("a={},b={},c={},d={},e={}".format(a,b,c,d,e))
##a=1,b=2,c=3,d=de,e=(4, 5)
二、列表
#使用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转换为列表。
print(list(range(1,10,2)))
##[1, 3, 5, 7, 9]
print(list((1,2,3)))
#[1, 2, 3]
# 列表的大多数方法是无返回值的,即无法赋值。list_name.method(除了pop)
#<一>、列表元素的增加的主要方式
# “+”运算符:尾部添加列表,严格意义上来讲,这并不是真的为列表添加元素,而是创建一个新列表。
# “*”运算符:重复增加相同元素
# append函数: 尾部添加整体对象。,无返回值;真正意义上的在列表尾部添加元素,速度较快。
# extend函数: 尾部添加序列,用于在列表末尾一次性追加另一个序列中的多个值
# insert函数: 指定位置添加对象
a=[1,2,3,4]
a.append([4,5,6])
print(a)
##[1, 2, 3, 4, [4, 5, 6]]
b=[1,2,3,4]
b.extend([4,5,6])
print(b)
##[1, 2, 3, 4, 4, 5, 6]
a=[3, 4, 5, 7, 9, 11, 13, 15, 17]
a.insert(3, 6) #在下标为3的位置插入元素6
print(a)
#<二>、列表元素的删除
#1.del命令删除列表中的指定位置上的元素或对象
a=[3, 4, 5, 7, 9, 11, 13, 15, 17]
del a[1]
print(a)
##[3, 5, 7, 9, 11, 13, 15, 17]
#3.使用列表对象的remove()方法删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常。
a_list = [3,5,7,9,7,11]
a_list.remove(7)
print(a_list)
##[3, 5, 9, 7, 11]
# #例题
x=[1,2,1,2,1,1]
for i in x:
if i==1:
x.remove(i)
# print(x)
# ##[2, 2, 1] ,不能完全删除1,要用切片--浅拷贝
x=[1,2,1,2,1,1]
y=x[:]
for i in y:
if i==1:
x.remove(i)
print(x)
##[2, 2]
<三>、浅,深拷贝
#copy浅拷贝没有拷贝子对象,所以原始数据改变,子对象会改变。
#深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的
import copy
alist=[1,2]
d=copy.deepcopy(alist)
print(alist)
##[1, 2]
print(d)
##[1, 2]
alist.append(5)
print(alist)
##[1, 2, 5]
print(d)
##[1, 2]
#<列表排序>
#倒序 reverse(永久) reversed(临时)
#1sort()
#正序 sort(永久) sorted(临时)
# 语法:list.sort( key=None, reverse=False)
# reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
a=[3, 4, 15, 11, 9, 17, 13, 6, 7, 5]
a.sort()
print(a)
##[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
a.sort(reverse=True)
print(a)
##[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
<四>推导式
#<1>、列表推导式
#########1##########
#格式:[表达式 for 变量 in 列表]
a=[x*x for x in range(10)]
print(a)
##[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#等价于
a=[]
for x in range(10):
a.append(x*x)
print(a)
#######2#########
#列表推导式—平铺
#基本格式 [表达式 for 变量1 in 列表1 for 变量2 in 变量1 ]
vec=[[1,2,3],[4,5,6],[7,8,9]]
print([num for elem in vec for num in elem])
##[1, 2, 3, 4, 5, 6, 7, 8, 9]
#等价于
vec=[[1,2,3],[4,5,6],[7,8,9]]
result=[]
for elem in vec:
for num in elem:
result.append(num)
print(result)
#######3#########
#列表推导式—元素过滤
#基本格式:[表达式 for 变量 in 列表 if 条件]
a=[-1,-4,6,7.5,-2.3,9,-11]
print([i for i in a if i>0])
##[6, 7.5, 9]
<五>、元组(tuple),元组一旦创建任何方法都不可以修改其元素
# 包含一个元素的元组,最后必须多写个逗号 a=(3,)
#(1)、元组的创建
#1 tuple()函数
a=tuple('abcdefg')
print(a)
##('a', 'b', 'c', 'd', 'e', 'f', 'g')
#2 zip()函数,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表。
a=[1,2,3]
b=[4,5,6]
x=zip(a,b)
print(x)
##<zip object at 0x0000026AA1709400>
print(list(x)) #转换为列表
##[(1, 4), (2, 5), (3, 6)]
三、映射类型
# 字典是一种可变容器模型,且可存储任意类型对象。
# 字典每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号“{}”中。
# dict = { key1 : value1,key2 : value2}
# 键可以为唯一且取任意不可修改对象,比如整数、实数、复数、字符串、元组等等。键不可重复的!
# 字典是无序可变。
<一>、字典dict的创建
#1、赋值,使用“=” 将一个字典赋值给一个变量
a_dict = {'server': 'db.diveintopython3.org', 'database': 'mysql'}
print(a_dict)
##{'server': 'db.diveintopython3.org', 'database': 'mysql'}
x = {} #空字典
print(x)
##{}
print(type(x))
##<class 'dict'>
#2、dict函数,使用dict利用已有数据创建字典:
keys=['a','b','c','d']
values=[1,2,3,4]
dic=dict(zip(keys,values))
print(dic)
##{'a': 1, 'b': 2, 'c': 3, 'd': 4}
#3、指定内容,使用dict根据给定的键、值创建字典
d=dict(name='Dong',age=37)
print(d)
##{'name': 'Dong', 'age': 37}
#以给定内容为键,创建值为空的字典
adict = dict.fromkeys(['name', 'age', 'sex'])
print(adict)
##{'name': None, 'age': None, 'sex': None}
<二>、字典的读取
# 1,字典元素的读取,以键作为下标可以读取字典元素,若键不存在则抛出异常
aDict = {'name':'Dong', 'sex':'male', 'age':37}
print(aDict['name'])
##Dong
#2,字典键或值的读取
#使用字典对象的items()方法可以返回字典的键、值对列表
print(aDict.items())
##dict_items([('name', 'Dong'), ('sex', 'male'), ('age', 37)])
#使用字典对象的keys()方法可以返回字典的键列表
print(aDict.keys())
##dict_keys(['name', 'sex', 'age'])
#使用字典对象的values()方法可以返回字典的值列表
print(aDict.values())
##dict_values(['Dong', 'male', 37])
#3,字典元素的遍历读取-items()
aDict = {'name':'Dong', 'sex':'male', 'age':37}
for item in aDict.items():
print(item)
##('name', 'Dong')
##('sex', 'male')
##('age', 37)
for key, value in aDict.items(): #序列解包用法
print(key,value)
# #name Dong
# #sex male
# #age 37
<三>、get()方法
#字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值。
# dict.get(key, default=None)
# ✓ key -- 字典中要查找的键。
# ✓ default -- 如果指定键的值不存在时,返回该默认值。
dict = {'Name': 'Zara', 'Age': 27}
print ("Value={}".format(dict.get('Age')))
print ("Value : %s" % dict.get('Sex', "Never"))
## Value=27
## Value : Never
<四>、修改字典
#增加新的键/值对,修改或删除已有键/值对
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8 # 更新 Age
print(dict)
##{'Name': 'Runoob', 'Age': 8, 'Class': 'First'}
dict['School'] = "菜鸟教程" # 添加信息
print(dict)
##{'Name': 'Runoob', 'Age': 8, 'Class': 'First', 'School': '菜鸟教程'}
<五>、删除字典元素
#能删单一的元素也能清空字典,清空只需一项操作。显示删除一个字典用del命令
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del dict['Name'] # 删除键 'Name'
print(dict)
##{'Age': 7, 'Class': 'First'}
dict.clear() # 清空字典
print(dict)
##{}
四、集合(set)类型
# 集合(set)是无序可变对象,使用一对大括号界定,元素不可重复,同一个集合中每个元素都是唯一的。
# 集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,而不能包含列表、字典、集合等可变类型的数据。
<一>、集合的创建
#1,,直接将集合赋值给变量
a={3,5}
#2,,使用set将其他类型数据转换为集合
b=set([0,1,2,3,5,3,4]) #自动去除重复
print(b)
##{0, 1, 2, 3, 4, 5}
<二>、集合元素的添加,添加一个元素
#1,add()函数
thisset = set(("Google", "Runoob", "Taobao"))
thisset.add("Facebook")
print(thisset)
##{'Google', 'Taobao', 'Runoob', 'Facebook'}
#2.update()函数,添加多个元素
thisset = set(("Google", "Runoob", "Taobao"))
thisset.update("Facebook")
print(thisset)
##{'F', 'a', 'o', 'Google', 'k', 'b', 'Runoob', 'c', 'Taobao', 'e'}
##字母顺序随机?
<三>、集合元素的删除
#1,,remove函数:将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
thisset = set(("Google", "Runoob", "Taobao"))
thisset.remove("Taobao")
print(thisset)
##{'Runoob', 'Google'}
#2,discard函数:将元素 x 从集合 s 中移除,如果元素不存在,不会发生错误。
<四>、集合元素成员的判断
#基本格式:element in set_name
thisset = set(("Google", "Runoob", "Taobao"))
print("Runoob" in thisset)
##True
<五>、集合基本运算,,Python集合支持交集、并集、差集等运算
a_set=set([8,9,10,11,12,13])
b_set={0,1,2,3,7,8}
print(a_set|b_set) #并集
print(a_set.union(b_set)) #并集
print(a_set&b_set) #交集
print(a_set.intersection(b_set)) # 交集
print( a_set - b_set) #差集
print( a_set.difference(b_set)) #差集
##小结:
#Python组合数据类型表示:
#切片:列表(方括号),元组(圆括号),字符串(单或者双引号)
#字典(成对大括号)