潜复制与深复制
l = [1, 1]
ll = l.copy()
lll = l
print(id(l),
id(ll),
id(lll))
输出:
2686293370944 2686293337472 2686293370944
取整
1.单纯取整,即只要整数部分
print(int(9.5))
print(int(-9.5))
# 输出
9
-9
2.四舍五入使用round函数
print(round(1.5, 0))
print(round(1.5))
print(round(0.5, 0))
print(round(0.5))
print(round(0.51))
print(round(0.51, 0))
# 输出
2.0
2
0.0
0
1
1.0
解决0.5的四舍五入:Decimal模块的实例可以准确地表示任何数,对其上或其下取整,还可以限制有效数字个数。
3.import math
range
>>>range(10) # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) # 从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5) # 步长为 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3) # 步长为 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 负数
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]
桶排序

桶排序的时间复杂度为O(n):
如果要排序的数据有 n 个,我们把它们均匀地划分到 m 个桶内,每个桶里就有 k=n/m 个元素。每个桶内部使用归并排序,时间复杂度为 O(k * logk)。m 个桶排序的时间复杂度就是 O(m * k * logk),因为 k=n/m,所以整个桶排序的时间复杂度就是 O(n*log(n/m))。当桶的个数m 接近数据个数 n 时,log(n/m) 就是一个非常小的常量,这个时候桶排序的时间复杂度接近 O(n)。
所以,桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少,但相应的空间消耗就会增大。
桶排序的使用条件和适用场景:
桶排序对要排序的数据的要求是非常苛刻的。使用条件如下:
(1)首先,要排序的数据需要很容易就能划分成m个桶,并且,桶与桶之间有着天然的大小顺序。这样每个桶内数据都排序完之后,桶与桶之间的数据不需要在进行排序。
(2)其次,数据在各个桶之间的分布比较均匀的。如果数据经过桶的划分之后,有些桶里的数据非常多,有些非常少,很不平均,那桶内数据排序的时间复杂度就不是常量级了。在极端情况下,如果数据都被划分到一个桶里,那就退化为 O(nlogn) 的排序算法了。
所以,桶排序比较适合用在外部排序中。所谓的外部排序就是数据存储在外部磁盘中,数据量比较大,内存有限,无法将数据全部加载到内存中。
浙公网安备 33010602011771号