加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

40个你可能不知道的Python技巧附代码

发布时间:2020-05-24 23:07:39 所属栏目:Python 来源:互联网
导读:40个你可能不知道的Python技巧附代码 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 + 1 for i in range(3)) a, b, c (1, 3, 5) a, (b, c), d = [1, (2, ...

1、拆箱

>>> a,b,c = 1,2,3
>>> a,c
(1,3)
>>> a,c = [1,3]
>>> a,c = (2 * i + 1 for i in range(3))
>>> a,3,5)
>>> a,(b,c),d = [1,(2,3),4]
>>> a
1
>>> b
2
>>> c
3
>>> d
4

2、使用拆箱进行变量交换

>>> a,b = 1,2
>>> a,b = b,a
>>> a,b
(2,1)

3、扩展的拆箱(Python 3支持)

>>> a,*b,4,5]
>>> a
1
>>> b
[2,4]
>>> c
5

4、负数索引

>>> a = [0,1,5,6,7,8,9,10]
>>> a[-1]
10
>>> a[-3]
8

5、列表切片(a[start:end])

>>> a = [0,10]
>>> a[2:8]
[2,7]

6、负数索引的列表切片

>>> a = [0,10]
>>> a[-4:-2]
[7,8]

7、带步数的列表切片(a[start:end:step])

>>> a = [0,10]
>>> a[::2]
[0,10]
>>> a[::3]
[0,9]
>>> a[2:8:2]
[2,6]

8、负数步数的列表切片

>>> a = [0,10]
>>> a[::-1]
[10,0]
>>> a[::-2]
[10,0]

9、列表切片赋值

>>> a = [1,5]
>>> a[2:3] = [0,0]
>>> a
[1,5]
>>> a[1:1] = [8,9]
>>> a
[1,5]
>>> a[1:-1] = []
>>> a
[1,5]

10、切片命名(slice(start,end,step))

>>> a = [0,5]
>>> LASTTHREE = slice(-3,None)
>>> LASTTHREE
slice(-3,None,None)
>>> a[LASTTHREE]
[3,5]

11、遍历列表索引和值(enumerate)

>>> a = ["Hello","world","!"]
>>> for i,x in enumerate(a):
... print "{}: {}".format(i,x)
...
0: Hello
1: world
2: !

12、遍历字典的KEY和VALUE(dict.iteritems)

>>> m = {"a": 1,"b": 2,"c": 3,"d": 4}
>>> for k,v in m.iteritems():
... print "{}: {}".format(k,v)
...
a: 1
c: 3
b: 2
d: 4

# 注意:Python 3中要使用dict.items

13、压缩 & 解压列表和可遍历对象

>>> a = [1,3]
>>> b = ["a","b","c"]
>>> z = zip(a,b)
>>> z
[(1,"a"),"b"),(3,"c")]
>>> zip(*z)
[(1,("a","c")]

14、使用zip分组相邻列表项

>>> a = [1,6]

>>> # Using iterators
>>> group_adjacent = lambda a,k: zip(*([iter(a)] * k))
>>> group_adjacent(a,3)
[(1,(4,6)]
>>> group_adjacent(a,2)
[(1,2),4),(5,1)
[(1,),(6,)]

>>> # Using slices
>>> from itertools import islice
>>> group_adjacent = lambda a,k: zip(*(islice(a,i,k) for i in range(k)))
>>> group_adjacent(a,)]

15、使用zip & iterators实现推拉窗(n-grams)

>>> from itertools import islice
>>> def n_grams(a,n):
... z = (islice(a,None) for i in range(n))
... return zip(*z)
...
>>> a = [1,6]
>>> n_grams(a,5),6)]
>>> n_grams(a,4)
[(1,6)]

16、使用zip反相字典对象

>>> m = {"a": 1,"d": 4}
>>> m.items()
[("a",1),("c",("b",("d",4)]
>>> zip(m.values(),m.keys())
[(1,"c"),"d")]
>>> mi = dict(zip(m.values(),m.keys()))
>>> mi
{1: "a",2: "b",3: "c",4: "d"}

17、合并列表

>>> a = [[1,2],[3,4],[5,6]]
>>> list(itertools.chain.from_iterable(a))
[1,6]

>>> sum(a,[])
[1,6]

>>> [x for l in a for x in l]
[1,6]

>>> a = [[[1,4]],[[5,6],[7,8]]]
>>> [x for l1 in a for l2 in l1 for x in l2]
[1,8]

>>> a = [1,8]]]
>>> flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]
>>> flatten(a)
[1,8]
Note: according to Python"s documentation on sum,itertools.chain.from_iterable is the preferred method for this.

18、生成器

>>> g = (x ** 2 for x in xrange(10))
>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> sum(x ** 3 for x in xrange(10))
2025
>>> sum(x ** 3 for x in xrange(10) if x % 3 == 1)
408

19、字典解析

>>> m = {x: x ** 2 for x in range(5)}
>>> m
{0: 0,1: 1,2: 4,3: 9,4: 16}

>>> m = {x: "A" + str(x) for x in range(10)}
>>> m
{0: "A0",1: "A1",2: "A2",3: "A3",4: "A4",5: "A5",6: "A6",7: "A7",8: "A8",9: "A9"}

20、使用字典解析反相字典对象

>>> m = {"a": 1,"d": 4}
>>> m
{"d": 4,"a": 1,"c": 3}
>>> {v: k for k,v in m.items()}
{1: "a",4: "d"}

21、命名的tuples(collections.namedtuple)

>>> Point = collections.namedtuple("Point",["x","y"])
>>> p = Point(x=4.0,y=2.0)
>>> p
Point(x=4.0,y=2.0)
>>> p.x
4.0
>>> p.y
2.0

22、继承命名tuples

>>> class Point(collections.namedtuple("PointBase","y"])):
... __slots__ = ()
... def __add__(self,other):
... return Point(x=self.x + other.x,y=self.y + other.y)
...
>>> p = Point(x=4.0,y=2.0)
>>> q = Point(x=2.0,y=3.0)
>>> p + q
Point(x=6.0,y=5.0)

23、Set & Set运算

>>> A = {1,3}
>>> A
set([1,3])
>>> B = {3,7}
>>> B
set([3,7])
>>> A | B
set([1,7])
>>> A & B
set([3])
>>> A - B
set([1,2])
>>> B - A
set([4,7])
>>> A ^ B
set([1,7])
>>> (A ^ B) == ((A - B) | (B - A))
True

24、Multisets运算(collections.Counter)

>>> A = collections.Counter([1,2])
>>> B = collections.Counter([2,3])
>>> A
Counter({2: 2,1: 1})
>>> B
Counter({2: 2,3: 1})
>>> A | B
Counter({2: 2,3: 1})
>>> A & B
Counter({2: 2})
>>> A + B
Counter({2: 4,3: 1})
>>> A - B
Counter({1: 1})
>>> B - A
Counter({3: 1})

25、列表中出现最多的元素(collections.Counter)

>>> A = collections.Counter([1,7])
>>> A
Counter({3: 4,1: 2,2: 2,4: 1,5: 1,6: 1,7: 1})
>>> A.most_common(1)
[(3,4)]
>>> A.most_common(3)
[(3,(1,2)]

26、双向队列(collections.deque)

>>> Q = collections.deque()
>>> Q.append(1)
>>> Q.appendleft(2)
>>> Q.extend([3,4])
>>> Q.extendleft([5,6])
>>> Q
deque([6,4])
>>> Q.pop()
4
>>> Q.popleft()
6
>>> Q
deque([5,3])
>>> Q.rotate(3)
>>> Q
deque([2,5])
>>> Q.rotate(-3)
>>> Q
deque([5,3])

27、限制长度的双向队列(collections.deque)

>>> last_three = collections.deque(maxlen=3)
>>> for i in xrange(10):
... last_three.append(i)
... print ",".join(str(x) for x in last_three)
...
0
0,1
0,2
1,3
2,4
3,5
4,6
5,7
6,8
7,9

28、排序字典(collections.OrderedDict)

>>> m = dict((str(x),x) for x in range(10))
>>> print ",".join(m.keys())
1,8
>>> m = collections.OrderedDict((str(x),".join(m.keys())
0,9
>>> m = collections.OrderedDict((str(x),x) for x in range(10,-1))
>>> print ",".join(m.keys())
10,1

29、默认字典(collections.defaultdict)

>>> m = dict()
>>> m["a"]
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
KeyError: "a"
>>>
>>> m = collections.defaultdict(int)
>>> m["a"]
0
>>> m["b"]
0
>>> m = collections.defaultdict(str)
>>> m["a"]
""
>>> m["b"] += "a"
>>> m["b"]
"a"
>>> m = collections.defaultdict(lambda: "[default value]")
>>> m["a"]
"[default value]"
>>> m["b"]
"[default value]"

30、使用defaultdict代表tree

>>> import json
>>> tree = lambda: collections.defaultdict(tree)
>>> root = tree()
>>> root["menu"]["id"] = "file"
>>> root["menu"]["value"] = "File"
>>> root["menu"]["menuitems"]["new"]["value"] = "New"
>>> root["menu"]["menuitems"]["new"]["onclick"] = "new();"
>>> root["menu"]["menuitems"]["open"]["value"] = "Open"
>>> root["menu"]["menuitems"]["open"]["onclick"] = "open();"
>>> root["menu"]["menuitems"]["close"]["value"] = "Close"
>>> root["menu"]["menuitems"]["close"]["onclick"] = "close();"
>>> print json.dumps(root,sort_keys=True,indent=4,separators=(",",": "))
{
"menu": {
"id": "file","menuitems": {
"close": {
"onclick": "close();","value": "Close"
},"new": {
"onclick": "new();","value": "New"
},"open": {
"onclick": "open();","value": "Open"
}
},"value": "File"
}
}

# 查看更多:https://gist.github.com/hrldcpr/2012250

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读