我的Python学习笔记

列表元素快速转换类型

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值