列表元素快速转换类型
a, b, c, d = ['1', '2', '3', '4']
'''
此时a、b、c、d变量全部都是字符型。
要快速赋值a、b、c、d变量为整数型就要用map进行批量转换:
'''
a, b, c, d = map(int, ['1', '2', '3', '4'])
快速统计二维数组(列表)每个元素的第3个元素总和
ll = [[205, 58, 0],
[115, 113, 576],
[238, 87, 780]]
# 快速统计二维列表ll每个元素的第三个元素总和 (0+576+780)
print(sum(i[2] for i in ll))
# 输出:1356
判断一个数是否在二维数组内
ll = [[205, 58, 0],
[115, 113, 576],
[238, 87, 780]]
aa = int(input('请输入一个数:'))
is_in = lambda x: '在' if any(x in i for i in ll) else '不在'
print(is_in(aa))
'''
运行:
输入:113
输出:在
输入:83
输出:不在
'''
统计列表中重复元素的数量
from collections import Counter
data = [1, 3, 3, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, 9]
counter = Counter(data)
print(counter)
'''
输出:
Counter({9: 5, 7: 4, 5: 3, 3: 2, 1: 1})
'''
若想知道某个元素的个数的话,可以直接通过 [] 访问,如果这个元素不存在,那么将返回0,并且还可以通过 most_common() 方法返回排名靠前的几个元素。
from collections import Counter
data = [1, 3, 3, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, 9]
counter = Counter(data)
print(counter[7])
print(counter[11])
print(counter.most_common(2))
'''
输出:
4
0
[(9, 5), (7, 4)]
'''
字典的排序
比如我们创建一个列表,列表中的每一个元素都是一个人的字典信息,然后我们按照每个人的年龄进行排序。 我们可以用 sorted() 的 key 参数,传入一个匿名函数,让排序按照我们预想的方式进行。
dic1 = [{"name": "Alex", "age": 18},
{"name": "Band", "age": 21},
{"name": "Coco", "age": 17}]
new_dic = sorted(dic1, key=lambda x: x["age"])
print(new_dic)
'''
输出:
[{'name': 'Coco', 'age': 17}, {'name': 'Alex', 'age': 18}, {'name': 'Band', 'age': 21}]
'''
访问字典键值防止报错的方式
如果键不在字典中,那么代码将会报错,引发一个 KeyError 。
更优雅的方式是使用 .get() 方法,此时如果键不存在,则不会引发 KeyError ,而是返回一个默认值,如果我们不指定默认值,它会直接返回None。
dic2 = {'name': 'Tesla',
'price': 250000}
print(dic2['name']) # 输出:Tesla
print(dic2['model'])
'''
报错:
KeyError: 'model'
'''
# 防止报错的正确方式:
print(dic2.get('model'))
# 输出None
# 即使 dic2 不存在'model'的键名也不会报错,只会返回None值
print(dic2.get('price'))
# 输出:250000
双星合并字典
info1 = {"name": "Alex", "age": 18}
info2 = {"name": "Alex", "city": "Bei Jing"}
info = {**info1, **info2}
print(info)
'''
输出:
{'name': 'Alex', 'age': 18, 'city': 'Bei Jing'}
'''
双星分解字典(JSON)
dic1 = [{"name": "Alex", "age": 18},
{"name": "Band", "age": 21},
{"name": "Coco", "age": 17}]
for i in dic1:
print("{name}'s age is {age}".format(**i))
'''
输出:
Alex's age is 18
Band's age is 21
Coco's age is 17
'''
创建字典的键值,避免键值不存在的解决方式
举个统计词频的例子,可以使用字典的setdefault方法,就省去if、else判断的语句。
counts = {}
for word in text.split():
counts.setdefault(word, 0)
counts[word] += 1
pprint.pprint() 取代print(),输出的结果更优雅
from pprint import pprint as ppr
dic1 = [{"name": "Alex", "age": 18},
{"name": "Band", "age": 21},
{"name": "Coco", "age": 17}]
print(dic1)
'''
输出:
[{'name': 'Alex', 'age': 18}, {'name': 'Band', 'age': 21}, {'name': 'Coco', 'age': 17}]
'''
ppr(dic1)
'''
输出:
[{'age': 18, 'name': 'Alex'},
{'age': 21, 'name': 'Band'},
{'age': 17, 'name': 'Coco'}]
'''
pprint()会进行格式化打印输出,更符合人眼阅读的需求,在调试过程中更省心。
批量安装库文件
import pip
pip.main(["install", "--user", "requests", "beautifulsoup4", "matplotlib", "wordcloud", "pandas", "pillow"])
字符串与字节码数组快速互换
字符串转 UTF-8 字节码
s = "阿健冇办法"
b = s.encode('utf-8')
print(b)
# b'\xe9\x98\xbf\xe5\x81\xa5\xe5\x86\x87\xe5\x8a\x9e\xe6\xb3\x95'
d = [i for i in b]
print(d)
# [233, 152, 191, 229, 129, 165, 229, 134, 135, 229, 138, 158, 230, 179, 149]
UTF-8 字节码转字符串
d = [233, 152, 191, 229, 129, 165, 229, 134, 135, 229, 138, 158, 230, 179, 149]
a = bytearray(d)
print(a)
# bytearray(b'\xe9\x98\xbf\xe5\x81\xa5\xe5\x86\x87\xe5\x8a\x9e\xe6\xb3\x95')
s = a.decode('utf-8')
print(s)
# 阿健冇办法
随机生成32位十六进制字节码
from random import randbytes
# 定义32位字符
l = 32
d = randbytes(l>>1)
# d 是16个随机字节的数组,例如:b'\x941z\x9dh\x80Su\r\xf2\x06\xec\xcc\x0fI\x8f'
a = [f'{i:02X}' for i in d]
# a 是随机字节的十六进制字符串的数组:
# ['94', '31', '7A', '9D', '68', '80', '53', '75', '0D', 'F2', '06', 'EC', 'CC', '0F', '49', '8F']
s = ''.join(a)
print(s)
# 94317A9D688053750DF206ECCC0F498F