python第四篇——组合数据类型

 一、序列:列表,元组,字符串,字节序列

# 列表:用于存储其值可变的表

# 元组:用于存储值固定不变的表

# 字符串:包含若干字符的序列数据,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组合数据类型表示:

#切片:列表(方括号),元组(圆括号),字符串(单或者双引号)

 

#字典(成对大括号)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季沐晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值