python 高级编程学习笔记

1. 推导式
a = []
for i inrag(10):
    if i % 2 == 0:
        a.append(i)
上面的写法适合c语言,但在python 里面,时间复杂度很高,下面的写法在python最合适:
[i for i in range(10) if i % 2 ==0]

2. enumerate 用法
i = 0
for el in ["a","b","c"]:
    print(i,el)
    i += 1
上面这个远不如下面的方法:
for i,el in enumerate(["a","b","c"]):
    print(i,el)

3. 合并两个列表,最终生成一个字典:

lis = []
for item in zip(("a","b","c"),(1,2,3)):
    lis.append(item)
print(lis)
print(dict((x,y) for x,y in lis))

4. 序列解包
a,b,*rest = 1,2,3,4,5
print(rest) #[3,4,5]

5. 字典复制和遍历的时间复杂度,看到下面这句话: 如果某个字典,历史元素非常多,但中间操作过程中删除了很多,只剩少数几个元素, 这个时候复制和遍历的时间复杂度都非常高, 有什么好办法吗? ---创建一个新的字典。

在复制和遍历字典的操作中,最坏情况复杂度中的n是字典曾经达到的最大元素数目,而不是当前元素数目。换句话说,如果一个字典曾经元素个数很多,后来又大大减少了,那么遍历这个字典可能要花费相当长的时间。因此在某些情况下,如果需要频繁遍历某个字典,那么最好创建一个新的字典对象,而不是仅在旧字典中删除元素。

dic = {"a":1,"b":2,"c":3,"d":4}  # 假如本字典历史值曾经很多
dic_keys = dic.keys()
dic_values = dic_values()
'''
#经历了删减
'''
'''
lis = []
for item in zip(list(dic_keys),list(dic_values)):
    lis.append(item)
new_dic = dict((x,y) for x,y in lis) 
# 生成新的字典

应该能减小最终要复制或者遍历时的时间复杂度,暂时想到了这个。 

 

 

你可能感兴趣的:(python)