为了准备清华的机考,花了大概半个小时整理了一下 Python 常用的数据结构的技巧(虽然可能存在其他直接的方法……)

数列

栈和队列的实现。

统一使用 append 压入数字。对于 pop:

1
2
print(a.pop(0)) #删除第一个元素并返回,用来形成队列
print(a.pop()) #删除最后一个元素并返回,用来形成栈

排序

  • 普通排序
1
a = sorted(a, reverse = True) # 排序
  • 多个数字排序
1
2
3
import operator
data = [(1, 2), (3, 4), (5, 6)]
data = sorted(data, key=operator.itemgetter(1, 0))

其中 operator.itemgetter 可以申明多个数字,是优先级的定义。

字典

快速创建字典

1
2
3
a = set(range(14))
b = set(range(1, 15))
res = dict(zip(a, b))

这个方法可以快速组件字典。

字典的操作

1
2
3
4
res = set([1, 2, 3])
res.pop(1, 0) # 右为default值,若没有则返回该值
adict = {'a': 12}
res.update(adict)
  • pop用来删除键,如果要删除的键不存在,则返回申明的第二个参数(这里是 0)。
  • update用来更新字典,参数是另一个字典。速度比直接创建新字典快不少。

集合

我发现我几乎没用过 set,可能作为集合每个元素只能出现一次的性质我没太需要用到。

1
2
3
4
5
6
7
8
9
10
x = set('spam')
y = set(['a', 'p', 'b'])

print(x & y)
print(x | y)
print(x - y)

y.add('x')
y.update([10,37,42])
y.remove('a')

上述的功能都很直接,故不赘述。特殊的,如果往 set 里面增加重复的元素,则没有任何事事情会发生,所以可以用来快速移除重复元素;但 set 不会维护输入的顺序,所以不建议在使用 set 的情况下做与遍历顺序相关的操作。一般来说,使用if a in B的操作,set 会比 list 更快。