Python的一些小技巧搜集与总结(持续更新)
一行python实现斐波那契数列:
fib=lambda n:0 if n<1 else 1 if n<2 else fib(n-1)+fib(n-2)
字典排序:
dic = {'a':3 , 'b':2 , 'c': 1}
dic1=sorted(dic.iteritems(),key=lambda x:x[0],reverse=True)
dic2=sorted(dic.iteritems(),key=lambda x:x[1],reverse=False)
结果:
dic1=[('c', 1), ('b', 2), ('a', 3)]
dic2=[('c', 1), ('b', 2), ('a', 3)]
列表排序:
>>> x=[(1,'c'),(2,'a'),(3,'b')]
>>> x
[(1, 'c'), (2, 'a'), (3, 'b')]
>>> x.sort()
>>> x
[(1, 'c'), (2, 'a'), (3, 'b')]
>>> x.sort(key=lambda i:i[1])
>>> x
[(2, 'a'), (3, 'b'), (1, 'c')]
将嵌套列表转换成单一列表:
import itertools
a = [[1, 2], [3, 4], [5, 6,7]]
a1=list(itertools.chain.from_iterable(a))
判断列表中是否有重复元素:
def Judge(list):
return len(list)>len(set(list))
写一个函数, 输入一个字符串, 返回倒序排列的结果:
def reverse1(string):
return string[::-1]
def reverse2(string):
tgt=list(string)
for i in range(len(string)):
tgt[i]=string[len(string)-1-i]
string=''.join(tgt)
return string
合并两列表并排序
list1 = [2, 3, 8, 4, 9, 5, 6]
list2 = [5, 6, 10, 17, 11, 2]
a=sorted(list(set(list1+list2)))
另外用快排也行
命名元组
如果不需要为对象添加行为,并且也预先知道有那些属性需要存储,可以选择使用命名元组,命名元组是只含有属性的元组,对于只读数据是个很好的方式。
>>> from collections import namedtuple
>>> Stock = namedtuple('Stock','symbol current high low')
>>> s1=Stock('GOOG',613,625,610)
>>> s1.symbol
'GOOG'
二维数组转置
a=[[1,2,3],[4,5,6],[7,8,9]]
a=[[d[i] for d in a] for i in range(len(a[0]))]
print(a)
则a变为[[1, 4, 7], [2, 5, 8], [3, 6, 9]]