python自学成才之路 列表,元组,集合详细用法
文章目录
列表简介
python列表使用[]表示,它实际上是一个数组,但是和一般数组不同的地方在于它内部封装了很多很好用的方法(比如append,pop)以及一些特性(比如切片,不可变列表元组),下面来一层层揭开python列表的面纱。
列表crud操作
创建列表
使用[]创建列表并初始化列表
names = ['Jane', 'Peter', 'Bob', 'Tom', 'Kyo']
print(names)
输出:
['Jane', 'Peter', 'Bob', 'Tom', 'Kyo']
访问列表元素
1.通过索引访问列表元素
print(names[0])
print(names[-1]) # 访问最后一个元素
print(names[-2]) # 访问倒数第二个元素
2.通过for循环遍历列表
for name in names:
print(name)
3.判断列表中是否存在某个元素
if 'peter' in names:
print('yes')
修改列表元素
print(names)
names[0] = 'Mike'
print(names)
输出:
['Jane', 'Peter', 'Bob', 'Tom', 'Kyo']
['Mike', 'Peter', 'Bob', 'Tom', 'Kyo']
添加元素
1.通过append向列表末尾添加元素
names.append('Jimmy')
2.通过insert方法向指定位置添加元素
这种方法会导致该元素后的所有元素向后移动一位
names.insert(3, 'kate')
删除元素
1.使用del删除指定位置元素
del names[0]
2.使用pop删除末尾元素
name = names.pop()
print(name)
3.使用pop弹出指定位置的元素
name = names.pop(3)
print(name)
4.根据值使用remove删除元素
注意根据值删除元素,如果存在多个相同的值,只会删除第一个,如果想要全部删除需要进行遍历。
names.remove('kate')
#遍历删除元素
names = ['peter','jane','Bob','peter','david','jack']
for name in names:
if name == 'peter':
names.remove(name)
print(names)
输出
['jane', 'Bob', 'david', 'jack']
列表排序
1.列表永久排序,使用sort默认按照首字母升序排序
print(names)
names.sort()
print(names)
输出:
['Peter', 'Bob', 'Kyo']
['Bob', 'Kyo', 'Peter']
2.传递reverse=True参数,按照首字母降序排序
print(names)
names.sort(reverse=True)
print(names)
输出:
['Bob', 'Kyo', 'Peter']
['Peter', 'Kyo', 'Bob']
3.使用sorted对列表临时排序
print(names)
print(sorted(names, reverse=True))
print(names)
输出:
['Peter', 'Kyo', 'Bob']
['Bob', 'Kyo', 'Peter']
['Peter', 'Kyo', 'Bob']
4.反转列表
使用reverse()方法反转列表,这个方法只反转列表,不对列表做排序操作。
print(names)
names.reverse()
print(names)
输出:
['Peter', 'Kyo', 'Bob']
['Bob', 'Kyo', 'Peter']
数值列表
使用range创建数值列表
1.注意使用range函数只包含起始值不包含末尾值
# 创建1~9的数组
data = range(1, 10)
2.创建数值列表时设置步长
# 创建[2,4,6,8]的列表
data = range(0, 10, 2)
3.结合range创建1~10平方数数值列表
squares = []
for value in range(1, 11, 2):
squares.append(value**2)
4.max求数值列表最大值
print(max(squares))
5.min求数值列表最小值
print(min(squares))
6.sum求数值列表和
print(sum(squares))
列表解析
使用列表解析实现一行代码创建数值列表
squares = [value ** 2 for value in range(1, 11, 2)]
等价于
squares = []
for value in range(1, 11, 2):
squares.append(value**2)
切片
切片,即通过起始和结束索引来截取列表的一部分,使用切片的时候会包含起始值不包含末尾值。 1.输出索引为0,1的两个元素
print(names[0:2])
2.输出第一个到底倒数第三个元素
print(names[0:-2])
3.如果没有指定起始索引,默认从0开始
print(names[:-2])
4.如果没有指定末尾索引,默认切片为起始索引到后面所有元素
print(names[0:])
5.输出倒数第二个元素到最后一个元素
print(names[-2:])
6.通过切片的方式实现复制操作
names2 = names[:]
names2.append('sum')
print(names)
print(names2)
输出:
['Bob', 'Kyo', 'Peter']
['Bob', 'Kyo', 'Peter', 'sum']
元组
元组是不可变的列表,在表现形式上和列表不同,列表使用[]来表示,元组使用()来表示。
tupleTest = (1, 3, 4)
虽然元组不可变,但是元组里面的单个元素却是可变的,比如像下面的这个元组,里面的元素都是列表,可以随意改变其中某个列表中元素的值。
tupleTest = ([1, 2, 3], [4, 5, 6])
print(tupleTest)
tupleTest[0][1] = 3
print(tupleTest)
输出:
([1, 2, 3], [4, 5, 6])
([1, 3, 3], [4, 5, 6])
元组打包和解包
给元组赋值时可以不用加上(),程序自身会自动做打包操作
t = 1, 2, 3
print(t)
输出:
(1, 2, 3)
元组也支持解包操作
x, y, z = t
print("x = " + str(x) + ', y = ' + str(y) + ', z' + str(z))
输出:
x = 1, y = 2, z = 3
集合
集合指的是set集合,他是一种特殊的列表,set集合会对内部的元素做去重处理,也就是set集合不会有重复元素,set集合使用{}表示,为了和字典区分空的set集合只能使用set()来表示。
basket = {'orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana'}
print(basket)
输出:
{'kiwi', 'banana', 'orange', 'pear', 'apple'}
空的set集合使用set()来表示
basket = set()
basket.add('apple')
basket.add('banana')
basket.add('pear')
basket.add('orange')
basket.add('apple')
basket.add('orange')
print(basket)
输出:
{'banana', 'orange', 'pear', 'apple'}
set集合还支持一些数学上的集合运算
a = set('abracadabra')
print(a)
b = set('alacazam')
print(b)
输出:
{'r', 'd', 'c', 'a', 'b'}
{'m', 'c', 'a', 'z', 'l'}
差集
a - b : 返回a中有b中没有的元素
print(a-b)
输出:
{'b', 'r', 'd'}
并集
a | b : 返回a,b的并集
print(a|b)
输出:
{'r', 'm', 'd', 'c', 'a', 'b', 'z', 'l'}
交集
a & b : 返回a,b的交集
print(a&b)
输出:
{'c', 'a'}
并集外的元素
a^b 返回两个集合并集外的元素
print(a^b)
输出:
{'b', 'r', 'm', 'z', 'd', 'l'}
- Linux下ls命令显示符号链接权限为777的探索
- Django form表单
- Django ORM那些相关操作
- 使用mitmproxy嗅探双向认证ssl链接——嗅探AWS IoT SDK的mqtts
- Django中ORM介绍和字段及其参数
- 几个实现分页的方法
- 如何识别IDA反汇编中动态链接库中的函数
- Kali Linux安装TL-WN821N USB无线网卡驱动(make失败)
- Cookie、Session登陆验证相关介绍和用法
- 题型分析
- .NET CORE 框架ABP的代码生成器(ABP Code Power Tools )使用说明文档
- Lua编写wireshark插件初探——解析Websocket上的MQTT协议
- 在Ubuntu 16.04环境下安装Docker-CE(附视频教程)
- 修改HTML5 input placeholder 颜色及修改失效的解决办法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP 错误和异常处理(上)
- 玩转 PhpStorm 系列(一):主题篇
- 如何用云开发打造“万人同屏”高并发实时互动小程序
- 实战丨云开发帮你和「火箭少女」合个影!
- 开源数据闪回工具—binlog2sql介绍
- 盘点前端面试常见的15个TS问题,你能答对吗?
- 『深度思考』对CenterNet的一些思考与质疑·测试对比CenterNet与U版YoloV3速度与精度
- 优秀员工应该具备的11个特质
- 腾讯位置服务教你快速实现距离测量小工具
- 一张PDF了解JDK11 GC调优秘籍-附PDF下载
- 如何用函数框架快速开发大型 Web 应用 | 实战
- 划重点 | Android Jetpack 三大重要更新!
- JVM系列之:详解java object对象在heap中的结构
- 微信会话语音文件的一句话识别
- 看动画学算法之:排序-归并排序