第五章组合数据类型

第五章组合数据类型

5.1认识组合数据类型

1.序列类型

有序列关系

支持双向索引

     ------------->
     0     1     2   #正向索引
m=['asd','fgh','jkl']
    -3     -2    -1  # 反向索引
    <--------------

2.集合类型

具有数学集合的特性

确定性、互异性、无序性

3.映射类型

以键值对的形式储存元素

原则

  1. 每个键只能对应一个值,不允许同一个键在字典中重复出现
  2. 字典中的键是不可变类型

不可变类型:整型、浮点型、字符串、元组

可变类型:列表、字典、集合

有顺序关系:字符串、列表、元组

无顺序关系:集合、字典

5.2列表

无长度限制,最灵活,可包含任意元素

5.2.1创建列表

1.使用中括号“[ ]”创建列表

各元素以 ,相隔

list_one=[]
2.使用list()函数创建
list_one=list('python')#()内的必须是可迭代类型数据

5.2.2访问列表元素

1.索引访问

访问list中索引为n的元素

list[n]
2.切片访问

截取部分元素,获取一个新列表

list[m:n:step]

按步长step获取列表list中索引[m,n)对应的元素

step默认为1,若m省略,切片从列表首部开始,若n省略,切片到列表末尾结束

3.遍历访问

可用 for…in…逐个访问列表元素

例えば

list_1=[1,2,3,4,5]
for i in list_1
print(i)

not in判断是否存在

5.2.3添加列表元素

1.append()方法

在列表末尾添加新元素

例えば

list_1 = [1,2,3,4]
list_1.append(5)
print(list_1)
2.extend()方法

在列表末尾添加另一列表的所有元素

例えば

list_str = ['a','b','c']
list_num = [1,2,3]
list_str.extend(list_num)
print(list_str)
3.insert()方法

按索引号将新元素插入列表指定位置

例えば

names =['baby','Lucy','Alise']
names.insert(2,'peter')
print(names)

5.2.4元素排序

1.sort()方法
sort(key=None,reverse = False)

按升序排列

sort(key=None,reverse = Ture)

按降序排列

reverse 默认为False, False为升序, Ture为降序

key指定排序规则,默认None

例えば

list_num = [1,2,3]
list_num.sort()#升序
list_num.sort(reverse=Ture)#降序
2.sorted()

升序排列,不会改变原列表,生成新列表

例えば

list_num = [1,2,3]
list1 = list_num.sorted()
print(list1)
3.revrerse()

逆置列表

例えば

list_str = ['a','b','c']
list_str.reverse()
print(list_str)

5.2.5删除列表元素

1.del 语句

删除指定元素

例えば

names = ['baby','Lucy','Alise']
del names[0]
print(names)

删除列表

例えば

del names
2.remove()方法

移除某个元素,有多个时,删除第一个

例えば

names = ['baby','Lucy','Alise']
names.remove('baby')
print(names)
3.pop()方法

移除列表中的某个元素,未指定元素索引号,默认移除列表最后一个元素

例えば

list_str = ['a','b','c']
print(list_str.pop(1))
4.clear()方法

清空列表

例えば

list_str = ['a','b','c']
list_str.clear()
print(list_str)

5.2.6列表推导式

列表推导式可以使用简单的方式,对列表或其他可迭代对象元素,进行遍历,过滤,再次计算,从而快速生成满足特定条件的新列表

可迭代对象:支持for…in…语句迭代获取数据的对象

isinstance()函数判断是否为可迭代对象

from collections.abc import Iterable
ls = [3,4,5]
print(isinstance(ls,Iterable))

补充

index()方法

用于从列表中找出某个值第一个匹配项的索引位置。

该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。

格式:

list.index(x[, start[, end]])
  • x-- 查找的对象。
  • start-- 可选,查找的起始位置。
  • end-- 可选,查找的结束位置
#!/usr/bin/python
# -*- coding: UTF-8 -*-

aList = [123, 'xyz', 'runoob', 'abc']

print "xyz 索引位置: ", aList.index( 'xyz' )
print "runoob 索引位置 : ", aList.index( 'runoob', 1, 3 )
#结果
xyz 索引位置:  1
runoob 索引位置 :  2

5.3元组

有顺序,可索引、切片、不可变

元组不可变,但嵌入列表元素,可通过改变列表,进而更改元组

1.创建元组

圆括号“()”、由逗号分隔元素
t1 = ()
t2 = (3,)

只有一个元素,该元素后的“,”不能省略

teple()
t1 = teple()

5.5集合

1.创建集合
大括号“{}”,逗号“,”分隔

空{}不能创建空集合,{}为空字典

s1={1,2}
set()
s = set()
2.集合常见操作
add(x)

向集合中添加元素x,x已存在时不做处理

remove(x)

删除集合中的元素x,若x不存在则抛出KeyError异常

discard(x)

删除集合中的元素x,若x不存在时不做处理

pop()

随机返回集合中的一个元素,同时删除该元素;若集合为空,则抛出KeyError异常

clear()

清空集合

copy()

复制集合,返回值为集合

isdisjoint(T)

判断集合与集合T是否没有相同的元素,没有返回True,有则返回False

3.集合推导式

与列表推导式类似,区别在于集合推导式外侧为大括号“{}”

5.6字典

字典可嵌套字典类型数据,具有映射关系

补充

键可以是字符串、数字类型等不可变类型,但是不能是列表、字典等可变类型

5.6.1创建字典

字典的表现形式为一组包含在大括号“{}"中的键值对,每个键值对为一个字典元素,每个元素通过逗号“,”分隔,每对键值通过“:”分隔,语法格式如下:

{1:1,2:2,3:3,.......键N:值N}

字典的值可以是任意类型,但键不能是列表或字典类型

字典元素无序,键/值必须唯一

“{}"创建字典

例えば

d1 = {}
d2 = {'a':1,'b':2}
dict()

例えば

d3 = dict()
d4 = dict({'a':1,'b':2})

5.6.2字典的访问

利用键访问值

格式

字典变量[]

例えば

print(d4['a'])
get()方法

根据键从字典中获取对应的值,若指定的键不存在,则返回默认值(default)

格式

d.get(key[,default])
keys()方法

获取所有键

例えば

dic = {'name':'jack','age':23,'height':185}
print(dic.keys())
values()方法

获取所有值

例えば

dic = {'name':'jack','age':23,'height':185}
print(dic.values())
items()方法

获取所有元素

例えば

dic = {'name':'jack','age':23,'height':185}
print(dic.items())

keys(),values(),items()返回值都是可迭代对象

补充

#操作函数
leng(d)#求元素个数
min(d)#求键的最小值
max(d)#求键的最大值
#操作方法
d.pop(key,default)#删除键值对,返回值
d.popitem#随机取出一个键值对,以元组(key,value)形式返回
d.clear()#删除所有键值对

for 循环遍历

for i in dict3:
    #此时,i指向的键
    #通过dict3[i]或dict3.get(i)获取对应值

5.6.3字典元素的添加和修改

1.字典元素添加
为指定的键赋值
字典变量[] =

例えば

add_dict = {'name':'jack','age':23,'height':185}
add_dict['sco'] = 98
print(add_dict)
update()方法

例えば

add_dict = {'name':'jack','age':23,'height':185}
add_dict.update(sco=98)
print(add_dict)
2.字典元素的修改
为指定的键赋值

例えば

add_dict = {'name':'jack','age':23,'height':185,'sco':98}
add_dict['sco'] = 100
print(add_dict)
update()方法

例えば

add_dict = {'name':'jack','age':23,'height':185,'sco':98}
add_dict.update(sco=100)
print(add_dict)

5.6.4字典元素的删除

1.pop()方法

删除指定元素,删除成功返回目标元素的值

例えば

add_dict = {'name':'jack','age':23,'height':185,'sco':98}
print(add_dict.pop())
2.popitem()方法

随机删除字典中的元素,删除成功返回目标元素的值

例えば

add_dict = {'name':'jack','age':23,'height':185,'sco':98}
print(add_dict.popitem)
3.clear()方法

清空字典中的元素

例えば

add_dict = {'name':'jack','age':23,'height':185,'sco':98}
print(add_dict.clear())

5.6.5字典推导式

字典推导式的格式、用法与列表推导式类似,区别在于字典推导式外侧为大括号“{}”,且内部需包含键和值2个部分

格式

{new_key:new_value for key,value in dict.items}

5.8组合数据类型应用运算符

1.“+”运算符

数据拼接

2.“*”运算符

原数据整数倍的拼接

3.“in” “not in”运算符

判断某个元素是否属于某个变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第五版的C语言程序设计第九章主要讲解了用户自己建立数据类型包括结构体和联合体的定义、初始化、访问和使用等内容。具体包括以下几个方面: 1. 结构体的定义和使用 结构体是一种用户自定义的数据类型,可以将不同类型的数据组合在一起,形成一个新的数据类型。结构体的定义格式为: ```c struct 结构体名 { 数据类型1 成员名1; 数据类型2 成员名2; ... }; ``` 结构体的成员可以通过“.”运算符进行访问,例如: ```c struct Student { char name[20]; int age; float score; }; struct Student stu1 = {"Tom", 18, 90.5}; printf("Name: %s, Age: %d, Score: %.1f\n", stu1.name, stu1.age, stu1.score); ``` 2. 结构体指针的使用 结构体指针可以指向结构体变量,也可以指向动态分配的结构体内存。结构体指针的定义格式为: ```c struct 结构体名 *指针变量名; ``` 结构体指针的成员访问可以使用“->”运算符,例如: ```c struct Student stu2 = {"Jerry",20, 85.0}; struct Student *p = &stu2; printf("Name: %s, Age: %d, Score: %.1f\n", p->name, p->age, p->score); ``` 3. 联合体的定义和使用 联合体是一种特殊的结构体,所有成员共用同一块内存空间,不同成员的值会互相影响。联合体的定义格式为: ```c union 联合体名 { 数据类型1 成员名1; 数据类型2 成员名2; ... }; ``` 联合体的成员访问可以使用“.”运算符,例如: ```c union Data { int i; float f; char str[20]; }; union Data data; data.i = 10; printf("data.i: %d\n", data.i); data.f = 3.14; printf("data.f: %.2f\n", data.f); strcpy(data.str, "hello"); printf("data.str: %s\n", data.str); ``` 4. 枚举类型的定义和使用 枚举类型是一种用户自定义的数据类型,可以将一组相关的常量定义为一个枚举类型。枚举类型的定义格式为: ```c enum 枚举类型名 { 枚举常量1, 枚举常量2, ... }; ``` 枚举类型的变量可以直接赋值为枚举常量,例如: ```c enum Color {RED, GREEN, BLUE}; enum Color c = GREEN; printf("c: %d\n", c); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值