列表的索引和切片
一、列表索引
- 列表中元素是有序排布的,使用下角标数字取值,例如a[2]
- 列表的第一个元素下角标是0,后面下角标依次往后增加。
- 最后一个元素的下角标,可以是 n-1,也可以是 -1。
二、列表切片:一次性取多个元素
- 切片语法:a[start:end:step]
- 关键词:
- start:起始位置,默认0
- end:结束位置,默认长度+1
- step:每次计算的步长,默认1
三、使用场景
- 索引使用于任何场景
- 切片可以深度拷贝
- 算法学习、刷题
总结
1、索引使用:0起始,-1结尾,计算下标并取值
2、索引问题:索引太大会导致越界错误,这个错误很容易出现
3、思想扩展:索引适合大部分数据集合,能索引一般都能切片
字典和json
一、json介绍
- 也称js对象简谱
- 是一种轻量级的数据交换格式
- 完全独立于编程语言的文本格式
- 用来存储和表示内容数据
二、字典和json的转换
- 官方库:import json
- json = json.dumps(dict)
- dict = json.loads(json)
- 第三方库:demjson
- json = demjson.encode(json)
- data = demjson.decode(json)
三、数据转化的说明
特殊情况:
- True/Flase 和 true/flase
- None 和 null
- json不支持单引号
总结
1、字典问题:通常字典转json是没有问题的,但是注意细节
2、json问题:json类似字典结构,但不完全一致,很多细节不同
3、转换问题:json转字典可能会出错,需要先检查json,再转换
列表生成式
一、基础语法:[i*2 for i in range(5)]
- 构造解析:
- 最外层是列表的中括号
- i*2是列表的单个元素
- 循环结构体:for i in range(5)
二、列表生成式的优劣势:
- 优势:
- 速度快
- 语法简洁
- 代码更少
- 可操作性强
- 劣势:
- 没有
列表生成式的扩展语法:
[i if i%3 else 'Three' for i in range( 1,13)]
["{}{}".format(m,n) for m in [1,2,3] for n in ['a','b']]
结果:
1、使用场景:适合列表的快速定义,和赋值操作
2、使用建议:推荐长期使用列表生成式,代码运行快,更简洁明了
3、代码长度:列表生成式的代码优雅,但是单行过长导致理解慢
字典生成式
一、键值对取值
- 基础操作:
- dict >键
- dict.keys() >键
- dict.values() >值
- dict.items() >(键,值)
二、字典生成式语法
- 基础语法:{k:v for i in range(1,4)}
- 语法解析:
- 外层括号是大括号
- k:v代表键值对,k为键,v为值
- 循环结构体:for i in range(1,4)
三、列表生成式的优劣势
- 优势:
- 速度快
- 语法简洁
- 代码更少
- 可操作性强
- 劣势:
- 没有
字典生成式的扩展语法:
{"{}:{}".format(k,k*k) for k in range(5)}
总结:
1、使用场景:适合字典的快速定义,和赋值操作
2、使用建议:推荐长期使用字典生成式,代码运行快,更简洁明了
3、代码长度:字典生成式的代码优雅,但是单行过长导致理解慢
随机数和随机取值
随机库:random
开发者:官方
导入语句:import random
一、随机数值
- 随机范围整数:random.randint()
- 随机小数:random.random()
- 随机范围小数:random.uniform()
二、随机取值类型
- 数字
- 字符串
- 数据对象
三、随机取值方式
- 随机1个
- 随机可重复n个
- 随机不重复n个
random.randint(1,100) ## 取1~100的其中一个整数
random.random() ## 只取小数
random.uniform(1,100) ## 随机范围小数
random.choice(10) ## 取10次,可重复
random.choices(a,k=2) ##从a列表中单次取2个,可重复
random.sample(b,k=4) ##从a列表中单次取4个,不重复,乱序
[round(random.random(),3) for i in range(10)] ##取10个小数,且小数点保留3位
总结
1、随机整数:左闭右闭的方位区间,随机出值
2、随机小数:可选范围和纯小数,推荐round函数规定小数位数
3、随机方式:可重复和不可重复是两种方式,注意区分并选择函数