python知识点整理一
1、数组元素之和
解法一
from functools import reduce
list=[1,3,5,7,9,34]
print(reduce(lambda x,y:x+y,list))
解法二
sum(list)
2、浅拷贝和深拷贝的区别:
https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html
直接赋值:其实就是对象的引用(别名)。
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
3、python中的标准数据类型
数字number、字符串string、列表list、元组tuple、字典dict 集合set、布尔 boolean
可变对象:list set dict
不可变对象:bumber string tuple
- 先从数据类型角度理解可变对象和不可变对象。
抽象数据类型的操作一般分为三类:
1、构造操作: 这类操作主要是基于一些已知信息,产生这个类的实例对象。类似银行进行开通账户
2、解析操作:这类操作是获取对象的一些有用信息,其结果反应了对象的一些特征,但返回的不是对象本身。类似银行查询账户余额
3、变化操作 :这类操作是修改对象内部的信息和状态。
如果一个类型,具只具有1和2两种操作,也就说只具有构造和解析操作,那么这个类型就是不可变类型,这个类型的对象就是不可变对象
如果一个类型,具有1、2、3三种操作,这个类型就是可变类型,这个类型的对象就是可变对象。
- 不可变对象:对象所指向的内存中的值不能被改变,当改变这个变量的时候,原来指向的内存中的值不变,变量不再指向原来的值,而是开辟一块新的内存,变量指向新的内存。
- 可变对象:对象指向的内存中的值会改变,当更改这个变量的时候,还是指向原来内存中的值,并且在原来的内存值进行原地修改,并没有开辟新的内存。
4、sort和sorted的区别
sorted(iterable, key=None, reverse=False)
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。sort会修改原始的字符串,返回None
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,
而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
5、sorted()排序应用,通过 key 的值来进行数组/字典的排序
方法一
array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
array = sorted(array, key=lambda x: x["age"])
方法二,
# 根据第三个域排序
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号。
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
import operator
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=operator.itemgetter(2))
先按照成绩降序排序,相同成绩的按照名字升序排序:
方法一
d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
l = sorted(d1, key=lambda x:(-x['score'], x['name']))
print(l)
方法二,参考https://www.cnblogs.com/100thMountain/p/4719503.html
先根据第二域排序,第二个域相同的话再根据第三个域排序
import operator
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=operator.itemgetter(1,2))
5、计算元素在列表中出现的次数
lst = [8, 6, 8, 10, 8, 20, 10, 8, 8]
lstb = set(lst)
dictc = {}
for i in lstb:
a = lst.count(i)
dictc[i] = a
dictd = sorted(dictc, key=lambda x : dictc[x], reverse=False)
print(dictd)
# 结果得到的是一个列表[20, 6, 10, 8]
dictd = sorted(dictc.items(), key=lambda x : x[1], reverse=False)
#结果是[(20, 1), (6, 1), (10, 2), (8, 5)]
6、计算元素相加
方法一
from functools import reduce
reduce(lambda x, y: x + y, range(1, 101))
方法二
sum(range(101))
7、查找列表中最大值或最小值
max([1,2,3])
min([1,2,3])
8、移除字符串中指定位置的字符
str.replace(old, new[, max]) old--将被替换的子字符串,new--新字符串,max--替换不超过max次
'123456'.replace('2', '')
9、字符串反转,将字符串str逆序
- 使用字符串切片:str[::-1],返回一个新的字符串
- 使用内置函数reversed(seq),seq -- 要转换的序列,可以是 tuple, string, list 或 range,返回一个反转的迭代器''.join(reversed(str)),返回一个新的字符串
- reverse()方法只能用到list中,无返回值,但是会对列表的元素进行反向排序 a=[1,2,3] a.reverse()
10.为什么要有decimal,解决了什么问题,为什么不用float?
from decimal import *
因为float会丢失精度。原因在于二进制要想表示十进制的数就会存在误差,比如用二进制来表示0.1,根本无法精确表示,但是这不是bug,是个feature,因为标准就是这样定的。IEEE 754 2.decimal
11.为什么就不存在不精确的问题?
Decimal完美利用了【通过借助整数来表示小数的方式】解决了不精确的问题。用二进制表示任何一个精准十进制整数,不管是奇数还是偶数,都是没有问题的。
12.随机数问题
import random
random.random():返回0到1之间的浮点数,不包含1
random.ranint(a, b):返回a到b之间的整数,包含a、b,且a、b为int
random.randrange([a, ]b[, step])返回a到b之间的整数,不包含b,step是递增值,a、b是int
比如,随机获取10内的基数:random.randrange(1, 10, 2)
random.uniform(a,b):返回a到b之间的实数,包含a、b
random.choice(seq):从序列元素中随机挑选一个元素,seq可以是列表、元组、字符串
13.时间戳转换
import time
# 获得当前时间时间戳
now = int(time.time())
#转换为其他日期格式,如:"%Y-%m-%d %H:%M:%S"
timeArray = time.localtime(now)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print(otherStyleTime)
14、python用列表生成式写嵌套循环
a = [[1,2], [3,4], [5,6]]一行代码展开该列表,生成[1,2,3,4,5,6]
[j for i in a for j in i]
15、字典生成式
# 去除掉字典中value < 60的数据
dict0 = {"英语":66, "数学":78, "政治":42, "语文":59}
dict1 = {k:v for k, v in dict0.items() if v >= 60}
print(dict1)
python知识点整理一的更多相关文章
- Python知识点整理,基础5 - 文件操作
- Python知识点整理,基础4 - 集合操作
- Python知识点整理,基础3 - 字典操作
- Python知识点整理,基础2 - 列表操作
- Python知识点整理,基础1 - 基本语法
- Python基础知识点整理(详细)
Python知识点整理(详细) 输出函数 print()可以向屏幕打印内容,或者在打开指定文件后,向文件中输入内容 输入函数 input([prompt])[prompt] 为输入的提示字符.该函数返 ...
- ACM个人零散知识点整理
ACM个人零散知识点整理 杂项: 1.输入输出外挂 //读入优化 int 整数 inline int read(){ int x=0,f=1; char ch=getchar(); while(ch& ...
- Android 零散知识点整理
Android 零散知识点整理 为什么Android的更新试图操作必须在主线程中进行? 这是因为Android系统中的视图组件并不是线程安全的.通常应该让主线程负责创建.显示和更新UI,启动子线程,停 ...
- vue前端面试题知识点整理
vue前端面试题知识点整理 1. 说一下Vue的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫 ...
随机推荐
- Sunday算法解决字符串匹配问题
概述 提起字符串匹配可能更多人会想到KMP算法,该算法时间复杂度为O(m+n),而且也是我们在学习数据结构过程中最早接触到的比较好的算法.但KMP算法需要在模式字符串有关联的情况下,也即模式字符串前后 ...
- leetcode刷题-70爬楼梯
题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 思路 最开始使用的是回溯的方法,但是时间效 ...
- Java的ArrayList实现随机生成N-M之间N个不重复的随机数
在此之前我使用Java的数组实现了产生N-M之间的不重复的随机数,下面是使用数列ArrayList实现同样的功能,代码如下: /** * 随机生成 N--M,N个不重复随机数 使用ArrayList ...
- Spring Boot与日志
目录 1.日志框架 2.市面上的日志框架 2.1 下表行间无任何对应关系 2.2 日志门面:slf4j 2.3 日志实现:logback 2.4 Spring Boot怎么做的呢? 3.slf4j的使 ...
- Tomcat配置SSL
Tomcat配置SSL 查询网上资料配置如下: <Connector port="8443" protocol="HTTP/1.1" maxThreads ...
- 抽象工厂模式详解 —— head first 设计模式
项目实例 假设你有一家 pizza 店,你有很多种 pizza,要在系统中显示你所有 pizza 种类.实现这个功能并不难,使用普通方式实现: public class PizzaStore { Pi ...
- Java简介以及入门
JAVA基础知识 Java简介 作者:詹姆斯·高斯林(James Gosling) Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此J ...
- 你想了解的分布式文件系统HDFS,看这一篇就够了
1.分布式文件系统 计算机集群结构 分布式文件系统把文件分布存储到多个节点(计算机)上,成千上万的计算机节点构成计算机集群. 分布式文件系统使用的计算机集群,其配置都是由普通硬件构成的,与用多个处理器 ...
- Bootstrap一周学习小结
一.响应式布局 1.bootstrap是自适应mobile和web,会根据分辨率大小而自适应的一个代码库,Bootstrap定义了很多js和css的效果,把这些效果集成为多个API,供在使用时调用. ...
- 分布式系统监视zabbix-安装
zabbix概述 Zabbix是什么 Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持. Zabbix 是一个企业级的分布式开源监控方案. Zabbi ...