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]]

posted @ 2017-04-27 14:25  lovealways  阅读(248)  评论(0编辑  收藏  举报