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 中

Category: 编程语言 Tagged: Python

Page 1 of 1