你应该知道关于 python 的小技巧

513 阅读2分钟

这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战

今天分享一些使用的 python 小技巧,从接触 AI 用 python 也快 2 年了,也遇到问题,尝试一些解决方案来。感觉接下来介绍解决方案都是比较实用,也希望对您有所帮助。

两个列表之间的差

我们现在有两个列表分别是 modelsobject_detections

models = ['fastRCNN', 'YOLO', 'mask-rcnn', 'deeplab', 'FCN']
object_detections = ['fastRCNN', 'YOLO', 'mask-rcnn']

我们想找到一些模型,也就是 modelsobject_detections 也就是这元素存在于 models 而不存在 object_detections

models_set = set(models)
object_detections_set = set(object_detections)

segmentation = list(models_set.symmetric_difference(object_detections_set))
print(segmentation)

计算 python 对象所占用的内存大小

对于任何数据结构(如列表、字典或任何对象)来存储数值或记录时,都要检查数据结构所占用的内存的大小。查看数据结构使用了多少内存是一个好的做法是用 sys.getsizeof返回对象的大小,单位为字节。

import sys

object_detections = ['fastRCNN', 'YOLO', 'mask-rcnn']

print("size of list = ",sys.getsizeof(object_detections))
#Memory: 4076 kilobyte(s)

列表去重

很多数情况,需要从列表中移除重复的元素。 通常我们会用 set 这个自动可以去重的集合,在 set 中是不允许有重复的元素。

listNumbers = [1,2,2,5,5,5,6,7,8]
print("Original= ", listNumbers)

listNumbers = list(set(listNumbers))
print("After removing duplicate= ", listNumbers)
Original=  [1, 2, 2, 5, 5, 5, 6, 7, 8]
After removing duplicate=  [1, 2, 5, 6, 7, 8]

如何有效地比较两个列表

通常我们需要比较两个列表是否相同,

from collections import Counter

one = [1, 5, 3, 7, 9]
two = [9, 1, 3, 5, 7]

print("比较两个列表是否相同", Counter(one) == Counter(two))
  • 对象是 hashable 可以使用 collections.Counter
  • 也可以使用 sorted()进行排序然后看是否相同

检测列表中仅包含一种元素

检查一个列表是否仅包含一种元素,这里使用一点小技巧,也就是计算一个元素出现个数,使用count是否和列表长度相同,如果相同,就说明该列表中所有元素都是一致的。

a = [3, 3, 3,3]
print("All element are duplicate in listOne", a.count(a[0]) == len(a))

b = [3, 3, 3,2]
print("All element are duplicate in listTwo", b.count(b[0]) == len(b))

计算函数耗时

通常我们需要了解一下我们函数所消耗时间,来衡量函数的性能。

import time startTime = time.time() 
# 你的代码
endTime = time.time() 
totalTime = endTime - startTime 
print("Total time required to execute code is= ", totalTime)

解构字典

如果熟悉 js 的 es6 新特性,应该对以下语法不会陌生。解构有点将容器中元素一个一个取出。

networkOne = {1: 'AlexNet', 2: "ResNet", 3:"DenseNet"}
networkTwo= {2: 'ViT', 4: "Transformer"}

networkThird = {**networkOne, **networkTwo}
print(networkThird)

{1: 'AlexNet', 2: 'ViT', 3: 'DenseNet', 4: 'Transformer'}