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)
相關文章
相關標籤/搜索