0

0

Python的组合数据类型怎么用

WBOY

WBOY

发布时间:2023-05-11 12:10:06

|

1456人浏览过

|

来源于亿速云

转载

组合数据类型

1 列表

列表的表达
  • 序列类型:内部元素有位置关系,能通过位置序号访问其中元素

  • 列表是一个可以使用多种类型元素,支持元素的增、删、查、改操作的序列类型

ls = ["Python", 1989, True, {"version": 3.7}]
ls
['Python', 1989, True, {'version': 3.7}]
  • 另一种产生方式:list(可迭代对象)

  • 可迭代对象包括:字符串、元组、集合、range()等

字符串转列表

list("欢迎订阅本专栏")
['欢', '迎', '订', '阅', '本', '专', '栏']

元组转列表

list(("我", "们", "很", "像"))
['我', '们', '很', '像']

集合转列表

list({"李雷", "韩梅梅", "Jim", "Green"})
['Green', 'Jim', '李雷', '韩梅梅']

特殊的range()

for i in [0, 1, 2, 3, 4, 5]:
    print(i)
0
1
2
3
4
5
for i in range(6):
    print(i)
0
1
2
3
4
5

如果起始数字缺省,默认为0

必须包含中止数字,但是注意中止的数字取不到

数字间隔缺省,默认为1

for i in range(1, 11, 2):
    print(i)
1
3
5
7
9
  • range()转列表

list(range(1, 11, 2))
[1, 3, 5, 7, 9]

列表的性质

  • 列表的长度——len(列表)

ls = [1, 2, 3, 4, 5]
len(ls)
5
  • 列表的索引——与同为序列类型的字符串完全相同

变量名[位置编号]

正向索引从0开始
反向索引从-1开始

cars = ["BYD", "BMW", "AUDI", "TOYOTA"]
print(cars[0])
print(cars[-4])
BYD
BYD
  • 列表的切片

变量名[开始位置:结束位置:切片间隔]

cars = ["BYD", "BMW", "AUDI", "TOYOTA"]
  • 正向切片

print(cars[:3])     # 前三个元素,开始位置缺省,默认为0;切片间隔缺省,默认为1
['BYD', 'BMW', 'AUDI']
print(cars[1:4:2])  # 第二个到第四个元素 前后索引差为2
['BMW', 'TOYOTA']
print(cars[:])      # 获取整个列表,结束位置缺省,默认取值到最后
['BYD', 'BMW', 'AUDI', 'TOYOTA']
print(cars[-4:-2])  # 获取前两个元素
['BYD', 'BMW']
  • 反向切片

cars = ["BYD", "BMW", "AUDI", "TOYOTA"]
print(cars[:-4:-1])      # 开始位置缺省,默认为-1
print(cars[::-1])        # 获得反向列表
['TOYOTA', 'AUDI', 'BMW']
['TOYOTA', 'AUDI', 'BMW', 'BYD']
列表的操作符
  • 用** list1+lis2 **的形式实现列表的拼接

a = [1, 2]
b = [3, 4]
a+b            # 该用法用的不多
[1, 2, 3, 4]
  • 用 n*list 或 list*n 实现列表的成倍复制

初始化列表的一种方式

[0]*10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
列表的操作方法

1、增加元素

  • 在末尾增加元素——列表.append(待增元素)

languages = ["Python", "C++", "R"]
languages.append("Java")
languages
['Python', 'C++', 'R', 'Java']
  • 在任意位置插入元素——列表.insert(位置编号,待增元素)
    在位置编号相应元素插入待增元素

languages.insert(1, "C")
languages
['Python', 'C', 'C++', 'R', 'Java']
  • 在末尾整体并入另一列表——列表1.extend(列表2)

append 将列表2整体作为一个元素添加到列表1中

languages.append(["Ruby", "PHP"])
languages
['Python', 'C', 'C++', 'R', 'Java', ['Ruby', 'PHP']]

extend 将待列表2内的元素逐个添加到列表1中,当然也可以采用加法实现。

languages = ['Python', 'C', 'C++', 'R', 'Java']
languages.extend(["Ruby", "PHP"])
languages
['Python', 'C', 'C++', 'R', 'Java', 'Ruby', 'PHP']

2、删除元素

  • 删除列表i位置的元素  列表.pop(位置)

languages = ['Python', 'C', 'C++', 'R', 'Java']
languages.pop(1)
languages
['Python', 'C++', 'R', 'Java']
  • 不写位置信息,默认删除最后一个元素

languages.pop()
languages
['Python', 'C++', 'R']
  • 删除列表中的第一次出现的待删元素 列表.remove(待删元素)

languages = ['Python', 'C', 'R', 'C', 'Java']
languages.remove("C")    
languages
['Python', 'R', 'C', 'Java']
languages = ['Python', 'C', 'R', 'C', 'Java']
while "C" in languages:
    languages.remove("C")    
languages
['Python', 'R', 'Java']

3、查找元素

  • 列表中第一次出现待查元素的位置 列表.index(待查元素)

languages = ['Python', 'C', 'R','Java']
idx = languages.index("R") 
idx
2

4、修改元素

  • 通过"先索引后赋值"的方式,对元素进行修改 列表名[位置]=新值

languages = ['Python', 'C', 'R','Java']
languages[1] = "C++"
languages
['Python', 'C++', 'R', 'Java']

5、列表的复制

  • 错误的方式:这种方式仅是相当于给列表起了一个别名

languages = ['Python', 'C', 'R','Java']
languages_2 = languages
print(languages_2)
['Python', 'C', 'R', 'Java']
languages.pop()
print(languages)
print(languages_2)
['Python', 'C', 'R']
['Python', 'C', 'R']
  • 正确的方式——浅拷贝

当内容中也有列表这种可变的情况时,这时浅拷贝可能出问题,应该采用深拷贝。

  • 方法1:列表.copy()

languages = ['Python', 'C', 'R','Java']
languages_2 = languages.copy()
languages.pop()
print(languages)
print(languages_2)
['Python', 'C', 'R']
['Python', 'C', 'R', 'Java']
  • 方法2:列表 [ : ]

  • 相当于对整个列表的切片

languages = ['Python', 'C', 'R','Java']
languages_3 = languages[:]
languages.pop()
print(languages)
print(languages_3)
['Python', 'C', 'R']
['Python', 'C', 'R', 'Java']

6、列表的排序

  • 使用列表.sort()对列表进行永久排序

  • 直接在列表上进行操作,无返回值

  • 默认是递增的排序

ls = [2, 5, 2, 8, 19, 3, 7]
ls.sort()
ls
[2, 2, 3, 5, 7, 8, 19]
  • 递减排列

ls.sort(reverse = True)
ls
[19, 8, 7, 5, 3, 2, 2]
  • 使用sorted(列表)对列表进行临时排序

  • 原列表保持不变,返回排序后的列表

ls = [2, 5, 2, 8, 19, 3, 7]
ls_2 = sorted(ls)
print(ls)
print(ls_2)
[2, 5, 2, 8, 19, 3, 7]
[19, 8, 7, 5, 3, 2, 2]
sorted(ls, reverse = True)
[19, 8, 7, 5, 3, 2, 2]

7、列表的翻转

  • 使用列表.reverse()对列表进行永久翻转

  • 直接在列表上进行操作,无返回值

ls = [1, 2, 3, 4, 5]
print(ls[::-1])
ls
[5, 4, 3, 2, 1]

[1, 2, 3, 4, 5]
ls.reverse()
ls
[5, 4, 3, 2, 1]

8、使用for循环对列表进行遍历

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

2 元组

 元组的表达
  • 元组是一个可以使用多种类型元素,一旦定义,内部元素不支持增、删和修改操作的序列类型

通俗的讲,可以将元组视作“不可变的列表”

names = ("Peter", "Pual", "Mary")
元组的操作
  • 不支持元素增加、元素删除、元素修改操作

    瑞宝通JAVA版B2B电子商务系统
    瑞宝通JAVA版B2B电子商务系统

    瑞宝通B2B系统使用当前流行的JAVA语言开发,以MySQL为数据库,采用B/S J2EE架构。融入了模型化、模板、缓存、AJAX、SEO等前沿技术。与同类产品相比,系统功能更加强大、使用更加简单、运行更加稳 定、安全性更强,效率更高,用户体验更好。系统开源发布,便于二次开发、功能整合、个性修改。 由于使用了JAVA开发语言,无论是在Linux/Unix,还是在Windows服务器上,均能良好运行

    下载
  • 其他操作与列表的操作完全一致

元组的常见用处

打包与解包

  • 例1 返回值是打包成元组的形式

def f1(x):              # 返回x的平方和立方
    return x**2, x**3   # 实现打包返回

print(f1(3))
print(type(f1(3)))      # 元组类型
(9, 27)
a, b = f1(3)            # 实现解包赋值 
print(a)
print(b)
9
27
  • 例2

  • 采用zip函数进行打包

numbers = [201901, 201902, 201903]
name = ["小明", "小红", "小强"]
list(zip(numbers,name))
[(201901, '小明'), (201902, '小红'), (201903, '小强')]
for number,name in zip(numbers,name):   # 每次取到一个元组,立刻进行解包赋值
    print(number, name)
201901 小明
201902 小红
201903 小强

3 字典

字典的表达
  • 映射类型: 通过“键”-“值”的映射实现数据存储和查找

  • 常规的字典是无序的,仅可以通过键来对数据进行访问

students = {201901: '小明', 201902: '小红', 201903: '小强'}
students

字典键的要求

  • 1、字典的键不能重复

如果重复,前面的键就被覆盖了

students = {201901: '小明', 201901: '小红', 201903: '小强'}
students
{201901: '小红', 201903: '小强'}
  • 2、字典的键必须是不可变类型,如果键可变,就找不到对应存储的值了

  • 不可变类型:数字、字符串、元组。  一旦确定,它自己就是它自己,变了就不是它了。

  • 可变类型:列表、字典、集合。  一旦确定,还可以随意增删改。因此这三个类型不能作为字典的键。

d1 = {1: 3}
d2 = {"s": 3}
d3 = {(1,2,3): 3}

上面没有报错,说明是合法的。

d = {[1, 2]: 3}
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

 in 
----> 1 d = {[1, 2]: 3}


TypeError: unhashable type: 'list'
d = {{1:2}: 3}
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

 in 
----> 1 d = {{1:2}: 3}


TypeError: unhashable type: 'dict'
d = {{1, 2}: 3}
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

 in 
----> 1 d = {{1, 2}: 3}


TypeError: unhashable type: 'set'
字典的性质
  • 字典的长度——键值对的个数

students = {201901: '小明', 201902: '小红', 201903: '小强'}
len(students)
3
  • 字典的索引

通过 字典[键] 的形式来获取对应的值

students = {201901: '小明', 201902: '小红', 201903: '小强'}
students[201902]
'小红'
字典的操作方法

1、增加键值对

  • 变量名[新键] = 新值

students = {201901: '小明', 201902: '小红', 201903: '小强'}
students[201904] = "小雪"
students
{201901: '小明', 201902: '小红', 201903: '小强', 201904: '小雪'}

2、删除键值对

  • 通过del 变量名[待删除键]

students = {201901: '小明', 201902: '小红', 201903: '小强'}
del students[201903]
students
{201901: '小明', 201902: '小红'}
  • 通过变量名.pop(待删除键)

students = {201901: '小明', 201902: '小红', 201903: '小强'}
value = students.pop(201903)   # 删除键值对,同时获得删除键值对的值
print(value)
print(students)
小强
{201901: '小明', 201902: '小红'}
  • 变量名.popitem() 随机删除一个键值对,并以元组返回删除键值对

students = {201901: '小明', 201902: '小红', 201903: '小强'}
key, value = students.popitem()
print(key, value)
print(students)
201903 小强
{201901: '小明', 201902: '小红'}

3、修改值

  • 通过先索引后赋值的方式对相应的值进行修改

students = {201901: '小明', 201902: '小红', 201903: '小强'}
students[201902] = "小雪"
students
{201901: '小明', 201902: '小雪', 201903: '小强'}

4、d.get( )方法

d.get(key,default) 从字典d中获取键key对应的值,如果没有这个键,则返回default

  • 小例子:统计"牛奶奶找刘奶奶买牛奶"中字符的出现频率

s = "牛奶奶找刘奶奶买牛奶"
d = {}
print(d)
for i in s:
    d[i] = d.get(i, 0)+1 # 如果该字符第一次出现,则返回default 0 ,然后+1统计。如果之前就有i这个键,则返回该 key i 所对应的值。
    print(d)
# print(d)
{}
{'牛': 1}
{'牛': 1, '奶': 1}
{'牛': 1, '奶': 2}
{'牛': 1, '奶': 2, '找': 1}
{'牛': 1, '奶': 2, '找': 1, '刘': 1}
{'牛': 1, '奶': 3, '找': 1, '刘': 1}
{'牛': 1, '奶': 4, '找': 1, '刘': 1}
{'牛': 1, '奶': 4, '找': 1, '刘': 1, '买': 1}
{'牛': 2, '奶': 4, '找': 1, '刘': 1, '买': 1}
{'牛': 2, '奶': 5, '找': 1, '刘': 1, '买': 1}

5、d.keys( ) d.values( )方法

把所有的key,value 单独拿出来。

students = {201901: '小明', 201902: '小红', 201903: '小强'}
print(list(students.keys()))
print(list(students.values()))
[201901, 201902, 201903]
['小明', '小红', '小强']

6、d.items( )方法及字典的遍历

print(list(students.items()))
for k, v in students.items():#进行解包
    print(k, v)
[(201901, '小明'), (201902, '小红'), (201903, '小强')]
201901 小明
201902 小红
201903 小强

4 集合

集合的表达

  • 一系列互不相等元素的无序集合(互斥)

  • 元素必须是不可变类型:数字,字符串或元组,可视作字典的键

  • 可以看做是没有值,或者值为None的字典

students = {"小明", "小红", "小强", "小明"}   #可用于去重
students
{'小强', '小明', '小红'}
集合的运算
  • 小例子 通过集合进行交集并集的运算

Chinese_A = {"刘德华", "张学友", "张曼玉", "钟楚红", "古天乐", "林青霞"}
Chinese_A
{'刘德华', '古天乐', '张学友', '张曼玉', '林青霞', '钟楚红'}
Math_A = {"林青霞", "郭富城", "王祖贤", "刘德华", "张曼玉", "黎明"}
Math_A
{'刘德华', '张曼玉', '林青霞', '王祖贤', '郭富城', '黎明'}
  • 语文和数学两门均为A的学员

  • S & T 返回一个新集合,包括同时在集合S和T中的元素

Chinese_A & Math_A
{'刘德华', '张曼玉', '林青霞'}
  • 语文或数学至少一门为A的学员

  • S | T 返回一个新集合,包括集合S和T中的所有元素

Chinese_A | Math_A
{'刘德华', '古天乐', '张学友', '张曼玉', '林青霞', '王祖贤', '郭富城', '钟楚红', '黎明'}
  • 语文数学只有一门为A的学员

  • S ^ T 返回一个新集合,包括集合S和T中的非共同元素

Chinese_A ^ Math_A
{'古天乐', '张学友', '王祖贤', '郭富城', '钟楚红', '黎明'}
  • 语文为A,数学不为A的学员

  • S - T 返回一个新集合,包括在集合S但不在集合T中的元素

Chinese_A - Math_A
{'古天乐', '张学友', '钟楚红'}
  • 数学为A,语文不为A的学员

Math_A - Chinese_A
{'王祖贤', '郭富城', '黎明'}
 集合的操作方法
  • 增加元素——S.add(x)

stars = {"刘德华", "张学友", "张曼玉"}
stars.add("王祖贤")
stars
{'刘德华', '张学友', '张曼玉', '王祖贤'}
  • 移除元素——S.remove(x)

stars.remove("王祖贤")
stars
{'刘德华', '张学友', '张曼玉'}
  • 集合的长度——len(S)

len(stars)
3
  • 集合的遍历——借助for循环

for star in stars:
    print(star)
张学友
张曼玉
刘德华

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

129

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

77

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

81

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

60

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

444

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

15

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

12

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

5

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号