选择排序

  1. 两两比较大小,找到极值放在固定位置(升序/降序排列)
  2. n个数从左到右,索引从0n-1,两两比较后记录大值索引,此轮所有数比较完毕,将大数和索引0数交换,如果套数就是索引1,不交换。
  3. 第二轮,从1开始比较,找到最大值,将它和索引1位置交换,如果它就在索引1位置则不交换。依次类推,每次左边都会固定下一个套数。

bookmark: section sort

字典

可变的,无序的,key不重复
{key:value}

初始化字典
d = dict()
d = {}
d = {‘a’: 10, ‘b’: 20, ‘c’: None, ‘d’:[1, 2, 3]}
dict(kwargs) 使用name=value初始化一个字典
dict(iterable,
kwargs) 使用可迭代对象和name=value对构造字典
d = dict(((‘1’, a), (2, ‘b’)))
d = dict(([1, ‘a’], [2, ‘b’]))
dict(mapping, **kwargs) 使用一个字典构建另一个字典
类方法dict.fromkeys(iterable, value)
d = dict.fromkeys(range(5))
d = dict.fromkeys(range(5), 0)

访问字典
dict[key] 不存在,返回KeyError
dict.get(key[, default])
key不存在,返回def(def未设置时,返回None);
dict.setdefault(key[, default]) 不存在,添加kv; 没有def, v=None

修改字典
dict[key] = value
dict.update([other]) -> None 使用另一个字典的kv更新字典

删除字典
dict.pop(key[, default]) 不存在返回def;没有def,返回KeyError
dict.popitem() 返回任意item,empty dict 返回KeyError异常
dict.clear()

defaultdict
collections.defaultdict([default_factory[, …]])
default_factory 缺省是None,它提供一个初始化函数。
当key不存在时,会调用这个工厂函数来生成key对应的value

  1. dd = defaultdict(function)
  2. dd['foo'] # key 'foo' 不存在时,dd调用function函数生成‘foo’对应的value
  3. # 注意调用,即实例化
  4. from collections import defaultdict
  5. d1 = {}
  6. d2 = defaultdict(list)
  7. for k in 'abced':
  8. for v in range(5):
  9. if k not in d1.keys():
  10. d1[k] = []
  11. d1[k].append(v)
  12. print(d1)
  13. for k in 'mnopq':
  14. for v in range(3):
  15. d2[k].append(v) # k不存在, 调用list生成[]; 使用append 添加v
  16. print(d2)

OrderedDict
collections.OrderedDict([items])
有序字典,顺序指录入顺序
from collections import OrderedDict
import random
d = {‘banbana’: 3, ‘apple’: 4, ‘pear’: 1, ‘orange’: 2}
print(d)
keys = list(d.keys())
random.shuffle(keys)
print(keys)
od = OrderedDict()
for key in keys:
od[key] = d[key]
print(od)
print(od.keys())

  1. from colletions import OrderedDict
  2. od = OrderedDict()
  3. od[1] = 'a'
  4. od[3] = 'c'
  5. od[2] = 'b'
  6. od[4] = 'd'
  7. od[6] = 'f'
  8. print(od)
  9. print(od.keys())
  10. 有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印
  11. 3.6版本的python的字典就是记录key插入的顺序

字典练习
用户输入一个数字
打印每一位数字及其重复的次数
数字重复统计
随机产生100个整数
数字的范围[-1000, 1000]
升序输出所有不同的数字及其重复的次数

字符串重复统计
字符表‘abcd…z’
随机挑选2个字母组成字符串,共挑选100个
降序输出所有不同的字符串及重复的次数

字符串重复统计
字符表‘abcv’
随机挑选2个字母组成字符串,共排行100个
随机挑选2个字母组成字符串,共排行100个
随机挑选2个字母组成字符串,共排行100个