30个有关Python的小技巧
2014-12-25 10:28
393 查看
本文摘自PHPchina.com
1.1拆箱
1.2拆箱变量交换
1.3扩展拆箱(只兼容python3)
1.4负数索引
1.5切割列表
1.6负数索引切割列表
1.7指定步长切割列表
1.8负数步长切割列表
1.9列表切割赋值
1.10命名列表切割方式
1.11列表以及迭代器的压缩和解压缩
1.12列表相邻元素压缩器
1.13在列表中用压缩器和迭代器滑动取值窗口
1.14用压缩器反转字典
1.15列表展开
1.16生成器表达式
1.17字典推导
1.18用字典推导反转字典
1.19命名元组
1.20继承命名元组
1.21操作集合
1.1拆箱
>>>a,b,c=1,2,3 >>>a,b,c (1,2,3) >>>a,b,c=[1,2,3] >>>a,b,c (1,2,3) >>>a,b,c=(2*i+1foriinrange(3)) >>>a,b,c (1,3,5) >>>a,(b,c),d=[1,(2,3),4] >>>a 1 >>>b 2 >>>c 3 >>>d 4
1.2拆箱变量交换
>>>a,b=1,2 >>>a,b=b,a >>>a,b (2,1)
1.3扩展拆箱(只兼容python3)
>>>a,*b,c=[1,2,3,4,5] >>>a 1 >>>b [2,3,4] >>>c 5
1.4负数索引
>>>a=[0,1,2,3,4,5,6,7,8,9,10] >>>a[-1] 10 >>>a[-3] 8
1.5切割列表
>>>a=[0,1,2,3,4,5,6,7,8,9,10] >>>a[2:8] [2,3,4,5,6,7]
1.6负数索引切割列表
>>>a=[0,1,2,3,4,5,6,7,8,9,10] >>>a[-4:-2] [7,8]
1.7指定步长切割列表
>>>a=[0,1,2,3,4,5,6,7,8,9,10] >>>a[::2] [0,2,4,6,8,10] >>>a[::3] [0,3,6,9] >>>a[2:8:2] [2,4,6]
1.8负数步长切割列表
>>>a=[0,1,2,3,4,5,6,7,8,9,10] >>>a[::-1] [10,9,8,7,6,5,4,3,2,1,0] >>>a[::-2] [10,8,6,4,2,0]
1.9列表切割赋值
>>>a=[1,2,3,4,5] >>>a[2:3]=[0,0] >>>a [1,2,0,0,4,5] >>>a[1:1]=[8,9] >>>a [1,8,9,2,0,0,4,5] >>>a[1:-1]=[] >>>a [1,5]
1.10命名列表切割方式
>>>a=[0,1,2,3,4,5] >>>LASTTHREE=slice(-3,None) >>>LASTTHREE slice(-3,None,None) >>>a[LASTTHREE] [3,4,5]
1.11列表以及迭代器的压缩和解压缩
>>>a=[1,2,3] >>>b=['a','b','c'] >>>z=zip(a,b) >>>z [(1,'a'),(2,'b'),(3,'c')] >>>zip(*z) [(1,2,3),('a','b','c')]
1.12列表相邻元素压缩器
>>>a=[1,2,3,4,5,6] >>>zip(*([iter(a)]*2)) [(1,2),(3,4),(5,6)] >>>group_adjacent=lambdaa,k:zip(*([iter(a)]*k)) >>>group_adjacent(a,3) [(1,2,3),(4,5,6)] >>>group_adjacent(a,2) [(1,2),(3,4),(5,6)] >>>group_adjacent(a,1) [(1,),(2,),(3,),(4,),(5,),(6,)] >>>zip(a[::2],a[1::2]) [(1,2),(3,4),(5,6)] >>>zip(a[::3],a[1::3],a[2::3]) [(1,2,3),(4,5,6)] >>>group_adjacent=lambdaa,k:zip(*(a[i::k]foriinrange(k))) >>>group_adjacent(a,3) [(1,2,3),(4,5,6)] >>>group_adjacent(a,2) [(1,2),(3,4),(5,6)] >>>group_adjacent(a,1) [(1,),(2,),(3,),(4,),(5,),(6,)]
1.13在列表中用压缩器和迭代器滑动取值窗口
>>>defn_grams(a,n):
...z=[iter(a[i:])foriinrange(n)]
...returnzip(*z)
...
>>>a=[1,2,3,4,5,6]
>>>n_grams(a,3)
[(1,2,3),(2,3,4),(3,4,5),(4,5,6)]
>>>n_grams(a,2)
[(1,2),(2,3),(3,4),(4,5),(5,6)]
>>>n_grams(a,4)
[(1,2,3,4),(2,3,4,5),(3,4,5,6)]
1.14用压缩器反转字典
>>>m={'a':1,'b':2,'c':3,'d':4}
>>>m.items()
[('a',1),('c',3),('b',2),('d',4)]
>>>zip(m.values(),m.keys())
[(1,'a'),(3,'c'),(2,'b'),(4,'d')]
>>>mi=dict(zip(m.values(),m.keys()))
>>>mi
{1:'a',2:'b',3:'c',4:'d'}
1.15列表展开
>>>a=[[1,2],[3,4],[5,6]]
>>>list(itertools.chain.from_iterable(a))
[1,2,3,4,5,6]
>>>sum(a,[])
[1,2,3,4,5,6]
>>>[xforlinaforxinl]
[1,2,3,4,5,6]
>>>a=[[[1,2],[3,4]],[[5,6],[7,8]]]
>>>[xforl1inaforl2inl1forxinl2]
[1,2,3,4,5,6,7,8]
>>>a=[1,2,[3,4],[[5,6],[7,8]]]
>>>flatten=lambdax:[yforlinxforyinflatten(l)]iftype(x)islistelse[x]
>>>flatten(a)
[1,2,3,4,5,6,7,8]
1.16生成器表达式
>>>g=(x**2forxinxrange(10))
>>>next(g)
0
>>>next(g)
1
>>>next(g)
4
>>>next(g)
9
>>>sum(x**3forxinxrange(10))
2025
>>>sum(x**3forxinxrange(10)ifx%3==1)
408
1.17字典推导
>>>m={x:x**2forxinrange(5)}
>>>m
{0:0,1:1,2:4,3:9,4:16}
>>>m={x:'A'+str(x)forxinrange(10)}
>>>m
{0:'A0',1:'A1',2:'A2',3:'A3',4:'A4',5:'A5',6:'A6',7:'A7',8:'A8',9:'A9'}
1.18用字典推导反转字典
>>>m={'a':1,'b':2,'c':3,'d':4}
>>>m
{'d':4,'a':1,'b':2,'c':3}
>>>{v:kfork,vinm.items()}
{1:'a',2:'b',3:'c',4:'d'}
1.19命名元组
>>>Point=collections.namedtuple('Point',['x','y'])
>>>p=Point(x=1.0,y=2.0)
>>>p
Point(x=1.0,y=2.0)
>>>p.x
1.0
>>>p.y
2.0
1.20继承命名元组
>>>classPoint(collections.namedtuple('PointBase',['x','y'])):
...__slots__=()
...def__add__(self,other):
...returnPoint(x=self.x+other.x,y=self.y+other.y)
...
>>>p=Point(x=1.0,y=2.0)
>>>q=Point(x=2.0,y=3.0)
>>>p+q
Point(x=3.0,y=5.0)
1.21操作集合
>>>A={1,2,3,3}
>>>A
set([1,2,3])
>>>B={3,4,5,6,7}
>>>B
set([3,4,5,6,7])
>>>A|B
set([1,2,3,4,5,6,7])
相关文章推荐
- 30个有关Python的小技巧
- 30个有关Python的小技巧
- 30个有关Python的小技巧,给程序员的 30 个基本 Python 贴士与技巧
- 30个有关Python的小技巧,给程序员的 30 个基本 Python 贴士与技巧
- 30个有关Python的小技巧
- 有关Python应用的21个小技巧
- python 实用的30个小技巧
- 有关Python应用的21个小技巧
- 41个有关Python的小技巧【转】
- 有关python的字典以及对象什么的一些小技巧
- 35 个有关 Python 的小技巧
- 有关Python中线程的超时控制以及一个简单的应用
- Python小技巧 - 子串查找
- python小技巧
- python 提高效率的几个小技巧
- [项目过程中所遇到的各种问题记录]图表篇——有关MSChart的一些小技巧
- Python少打字小技巧
- 【转载】python 提高效率的几个小技巧
- 写了几个有关operaminimod的python小程序
- Python小技巧 – True or False