python知识点整理一

一、数组元素之和
解法一
from functools import reduce list=[1,3,5,7,9,34] print(reduce(lambda x,y:x+y,list))
解法二
sum(list)

二、浅拷贝和深拷贝的区别:
https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html

直接赋值:其实就是对象的引用(别名)。html

浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。python

深拷贝(deepcopy): copy 模块的 deepcopy 方法,彻底拷贝了父对象及其子对象。数组

三、python中的标准数据类型 

数字number、字符串string、列表list、元组tuple、字典dict 集合set、布尔 boolean

可变对象:list set dict
不可变对象:bumber string tuple
  •   先从数据类型角度理解可变对象和不可变对象。

  抽象数据类型的操做通常分为三类:dom

一、构造操做: 这类操做主要是基于一些已知信息,产生这个类的实例对象。相似银行进行开通帐户 ide

二、解析操做:这类操做是获取对象的一些有用信息,其结果反应了对象的一些特征,但返回的不是对象自己。相似银行查询帐户余额 函数

三、变化操做 :这类操做是修改对象内部的信息和状态。ui

若是一个类型,具只具备1和2两种操做,也就说只具备构造和解析操做,那么这个类型就是不可变类型,这个类型的对象就是不可变对象 spa

若是一个类型,具备一、二、3三种操做,这个类型就是可变类型,这个类型的对象就是可变对象。code

  • 不可变对象:对象所指向的内存中的值不能被改变,当改变这个变量的时候,原来指向的内存中的值不变,变量再也不指向原来的值,而是开辟一块新的内存,变量指向新的内存。
  • 可变对象:对象指向的内存中的值会改变,当更改这个变量的时候,仍是指向原来内存中的值,而且在原来的内存值进行原地修改,并无开辟新的内存。
四、sort和sorted的区别
sorted(iterable, key=None, reverse=False)
sort 是应用在 list 上的方法,sorted 能够对全部可迭代的对象进行排序操做。sort会修改原始的字符串,返回None
list 的 sort 方法返回的是对已经存在的列表进行操做,无返回值,
而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操做。

五、sorted()排序应用,经过 key 的值来进行数组/字典的排序
方法一
array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
array = sorted(array, key=lambda x: x["age"])
方法二,
# 根据第三个域排序
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)
方法二,参考http://www.javashuo.com/article/p-wpotvdle-bd.html
先根据第二域排序,第二个域相同的话再根据第三个域排序
import operator
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=operator.itemgetter(1,2))
五、计算元素在列表中出现的次数
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)

六、计算元素相加
方法一
from functools import reduce
reduce(lambda x, y: x + y, range(1, 101))
方法二
sum(range(101))
七、查找列表中最大值或最小值
max([1,2,3])
min([1,2,3])

八、移除字符串中指定位置的字符
str.replace(old, new[, max]) old--将被替换的子字符串,new--新字符串,max--替换不超过max次
'123456'.replace('2', '')

九、字符串反转,将字符串str逆序
  • 使用字符串切片:str[::-1],返回一个新的字符串
  • 使用内置函数reversed(seq),seq -- 要转换的序列,能够是 tuple, string, list 或 range,返回一个反转的迭代器''.join(reversed(str)),返回一个新的字符串
  • reverse()方法只能用到list中,无返回值,可是会对列表的元素进行反向排序 a=[1,2,3] a.reverse()

10.为何要有decimal,解决了什么问题,为何不用float?orm

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)
相关文章
相关标签/搜索