python 学习摘要 小知识点

python3字符串base64编解码
首先,Base64生成的编码都是ascii字符。
其次,python3中字符都为unicode编码,而b64encode函数的参数为byte类型,所以必须先转码。

import base64

s = "你好" bs = base64.b64encode(s.encode("utf-8")) # 将字符为unicode编码转换为utf-8编码 print(bs) # 得到的编码结果前带有 b>>> b'5L2g5aW9' bbs = str(base64.b64decode(bs), "utf-8") print(bbs) # 解码>>> 你好 bs = str(base64.b64encode(s.encode("utf-8")), "utf-8") print(bs) # 去掉编码结果前的 b>>> 5L2g5aW9 bbs = str(base64.b64decode(bs), "utf-8") print(bbs) # 解码>>> 你好

 

python中的json对象字符串转化
https://www.cnblogs.com/minsons/articles/8042101.html(有详细说明,转换表对比和注意事项等)

>>> import json                     # 导入json库

>>> json_str=json.dumps(data)  # 字典转换为字符串
>>> type(json_str)
<class 'str'>

>>> d=json.loads(json_str) # 字符串转换为字典
>>> type(d)
<class 'dict'>

 

 

 

 计算运行时间

import timeit

def sum_sqr_1():
    li = list(range(10000))
print(timeit.timeit(stmt = sum_sqr_1, number = 1000))

 

列表表达式[List Comprehension]

顾名思义,这个表达式作用是以一个快捷的方法对列表进行操作或运算,返回新的列表。其使用方式为[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]

#打印出100以内所有十位数比个位数大1位的数字
num = [ n1*10+n2 for n1 in range(0, 10)
    for n2 in range(0, 10) if n1 == n2+1 ]
print(num)


匿名函数lambda函数

Lambda函数又称匿名函数,也有人称为lambda表达式。顾名思义,匿名函数就是没有名字的函数。函数没有名字也行?当然可以啦。有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要非给它取个名字不可。

lambda匿名函数的格式是 lambda 参数: 表达式。冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。其实lambda返回值是一个函数的地址,也就是函数对象

flist = [lambda x:x*x for x in range(1, 3)] #函数列表
print(flist)
print(flist[0])
print(flist[0](9))

 

zip函数

zip()函数来可以把2个或多个列表合并,并创建一个元组对的列表。元组对的数量以合并列表的最短长度为准。python 3中zip方法合并列表后生成的是zip对象,使用list方法可以将其变成列表,使用dict方法可以将其变成字典。

 

map函数

map函数是个非常有用的方法,其语法是 map(function, iterable, ...)map方法可以接收函数作为参数,并将其映射于列表的多个元素

#map函数的经典考题。我们有两个字符串A和B,现在要统计字符串A中有多少个字符也在字符串B中可以找到。
strA = "aAAAbBCCjjjj"
strB = "aAsahajjsssjj"
print(sum(map(strA.count, strB)))

  

reduce函数

 

reduce() 函数会对参数序列中元素进行累积。该方法第一个参数必需是函数,而且传入的函数必需要有2个参数,否则出现错误。该方法将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果

#reduce函数很适合连续计算(比如列表求和或连乘计算阶乘),经典代码如下。
from functools import reduce
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
reduce(lambda x, y: x*y, range(1, 5))

 

filter函数

 

Python的 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该方法与map和reduce类似,第一个参数都是函数,作用于可以迭代的对象比如列表和元组,但不同的是filter方法传入的函数是判断性函数, 只有符合条件的列表元素才会加入新的列表。Python 2中返回列表,python 3中返回filter对象,使用list方法可以转化为列表。

#下面这段代码利用filter方法删除字符串列表里的空白字符串。只有满足s and s.strip() = True的字符串才会加入新的列表。
def not_empty(s):
    return s and s.strip()
list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))

 

enumerate() 函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,常见用于for循环。一般只有需要同时用到索引index和value值的时候才用enumerate方法。注意直接使用enumerate方法生成是个enumerate对象,可以遍历的。

name = ["John", "Lucy", "Mary"]
name1 = enumerate(name)
print(dict(name1))

 

defaultdict

defaultdict工作起来完全像一个普通的Python字典,但它有额外的奖励。当您试图访问一个不存在的键,它不会引发错误,而是使用不存在的键创建新的key,其对应的默认值是根据创建defaultdict对象时作为参数传递的数据类型自动设置的。请看下面的代码作为示例。

from collections import defaultdict

names_dict = defaultdict(int)

names_dict["Bob"] = 1
names_dict["Katie"] = 2
sara_number = names_dict["Sara"] #通用的dict方法会出错,这个不会

print(names_dict)

 

deque

deque队列是在计算机科学里最基本的数据结构,遵循先入先出(FIFO)的原理。简单来说,这意味着添加到队列中的第一个对象也必须是要删除的第一个对象。我们只能在队列的前面插入内容,而只能从队列的后面删除内容,而队列中间没有任何动作。

collections模块提供的deque对象是能实现队列数据结构的优化版本。该功能的主要特色是能够保持队列的大小,即如果将队列的最大长度设置为10,则将deque根据FIFO原理添加和删除元素以保持最大长度始终为10。这是到目前为止,Python中队列的最佳实现。

from collections import deque

my_queue = deque(maxlen=10)

for i in range(10):
    my_queue.append(i+1)

print(my_queue)

for i in range(10, 15):
    my_queue.append(i+1)

print(my_queue)

#结果
deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], maxlen=10)
deque([6, 7, 8, 9, 10, 11, 12, 13, 14, 15], maxlen=10)

 

posted @ 2021-02-21 00:09  pearlcity  阅读(92)  评论(0编辑  收藏  举报