Python 小技巧
Sat 06 August 2016
List
DSU(decorate-sort-undecorate)
def case_insensitive_sort(string_list):
auxiliary_list = [(x.lower(), x) for x in string_list]
auxiliary_list.sort()
return [x[1] for x in auxiliary_list]
更加简便的方法:
sorted(string_list, key=str.lower)
还有一种方法:
def compare(a, b): return cmp(a.lower(), b.lower())
string_list.sort(compare)
遍历 list的index和value
for i,v in enumerate(l):
print i,v
0 1
1 2
list转换为dict,单数index为k,双数为v
a=['a','b','c','d']
a[::2]
['a', 'c']
a[1::2]
['b', 'd']
zip(a[::2],a[1::2])
[('a', 'b'), ('c', 'd')]
dict(zip(a[::2],a[1::2]))
{'a': 'b', 'c': 'd'}
list变量重新赋值:
L=[1,2]
L=[3,3]
上面的方法是做一个rebind,下面的方法完全修改了L的内容
L[:]=[3,3]
list,dict,set有类似于copy.copy做浅拷贝的方法:
L2=list(L1)
d2=dict(d1)
s2=set(s1)
清空 list:
del list[:]
- 大数据量的list,要进行局部元素删除,尽量避免用del随机删除,非常影响性能,如果删除量很大,不如直接新建list,然后用下面的方法释放清空旧list。
- 对于一般性数据量超大的list,快速清空释放内存,可直接用 a = [] 来释放。其中a为list。
- 对于作为函数参数的list,用上面的方法是不行的,因为函数执行完后,list长度是不变的,但是可以这样在函数中释放一个参数list所占内存: del a[:],速度很快,也彻底
获取list区别:
List3=list(set(List1)-set(List2))
Dict
避免过多的引号:
data = dict(red=1, green=2, blue=3)
和 data={‘red’:1,’green’:2,’blue’:3}
效果一样
遍历dict 的k,v:
for i,v in a.iteritems():
print i,v
a 1
c 3
b 2
dict如果某个key不存在则设置[],然后返回key对应的value
a['p']=[1]
a.setdefault('u',[]).append(8)
a
{'p': [1], 'u': [8]}
a.setdefault('u',[]).append(9)
a
{'p': [1], 'u': [8, 9]}
Set
set 的操作:
x & y 交集
x | y 并集
x - y 差集
t ^ s 对称差集(项在t或s中,但不会同时出现在二者中)
s.issubset(t),s <= t 测试是否 s 中的每一个元素都在 t 中
s.issuperset(t) , s >= t 测试是否 t 中的每一个元素都在 s 中