import collections import itertools
一、交换两个变量的值
在 Python 里面交换变量的值,不需要像 C 语言一样用异或操作,并且只需要一行就搞定了。
Python 编程包含变量交换、列表切片、字典操作等 30 个实用技巧。涵盖多变量赋值、负索引、生成器构造、元组命名及字典合并等功能。通过优化代码结构和使用内置函数,可提升开发效率与代码可读性,适合初学者快速掌握语言特性。

import collections import itertools
在 Python 里面交换变量的值,不需要像 C 语言一样用异或操作,并且只需要一行就搞定了。
a, b = 1, 2
a, b = b, a
在 Python 对多个变量进行赋值是非常方便的,可以在一行内进行各种形式的赋值。
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), d = [1, (2, 3), 4]
Python 的技巧非常令人愉悦,例如这种赋值方式。
a, *b, c = [1, 2, 3, 4, 5]
这种方式给编程提供了诸多便利。Python 将列表的首尾连接起来了。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# a[-1] 的值为 10,a[-2] 的值为 9
列表切片功能是一项非常实用的功能。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[2:8]) # 输出 [2, 3, 4, 5, 6, 7]
列表可以使用负的索引来进行切片。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[-4:-2]) # 输出 [7, 8]
使用步长可以让 Python 对列表进行切片时跳过其中指定步长的值。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[::2]) # 输出 [0, 2, 4, 6, 8, 10]
print(a[2:8:2]) # 输出 [2, 4, 6]
在对列表切片时,可以使用负的步长。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[::-1]) # 输出 [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(a[::-2]) # 输出 [10, 8, 6, 4, 2, 0]
列表切片赋值可以很方便地去修改列表中的某一部分值。
a = [1, 2, 3, 4, 5]
a[2:4] = [0, 0] # a = [1, 2, 0, 0, 5]
a[1:1] = [8, 9] # a = [1, 8, 9, 2, 3, 4, 5]
a[1:-1] = [] # a = [1, 5]
类似于定义宏,我们可以取个名字方便实际使用。
a = [0, 1, 2, 3, 4, 5]
LASTTHREE = slice(-3, None, None)
print(a[LASTTHREE]) # 输出 [3, 4, 5]
a = ['Hello', 'world', '!']
for i, x in enumerate(a):
print('{}: {}'.format(i, x))
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for k, v in m.items():
print('{}: {}'.format(k, v))
a = [1, 2, 3]
b = ['a', 'b', 'c']
z = zip(a, b) # [(1, 'a'), (2, 'b'), (3, 'c')]
print(list(zip(*z))) # [(1, 2, 3), ('a', 'b', 'c')]
a = [1, 2, 3, 4, 5, 6]
group_adjacent = lambda a, k: zip(*([iter(a)] * k))
print(group_adjacent(a, 3)) # [(1, 2, 3), (4, 5, 6)]
print(group_adjacent(a, 2)) # [(1, 2), (3, 4), (5, 6)]
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(dict(zip(m.values(), m.keys())))
# 输出 {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
a = [[1, 2], [3, 4], [5, 6]]
result = list(itertools.chain.from_iterable(a))
print(result) # [1, 2, 3, 4, 5, 6]
g = (x ** 2 for x in range(10))
print(next(g)) # 0
print(next(g)) # 1
print(next(g)) # 4
m = {x: x ** 2 for x in range(5)}
print(m) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print({v: k for k, v in m.items()})
# 输出 {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
Point = collections.namedtuple('Point', ['x', 'y'])
p = Point(x=1.0, y=2.0)
print(p.x) # 1.0
print(p.y) # 2.0
# 普通字典在旧版本中无序
m = dict((str(x), x) for x in range(10))
# 使用 OrderedDict 保持顺序
m = collections.OrderedDict((str(x), x) for x in range(10))
print(list(m.keys())) # ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}
z = {**x, **y}
print(z) # {'c': 4, 'a': 1, 'b': 3}
add = lambda x, y: x + y
print(add(5, 3)) # 8
a = "abcdefgh"
print("Reverse is", a[::-1]) # hgfedcba
mat = [[1, 2, 3], [4, 5, 6]]
print(list(zip(*mat))) # [(1, 4), (2, 5), (3, 6)]
a = ['my', 'life', 'is', 'pure']
print(' '.join(a)) # my life is pure
a = 'python' * 5
print(a) # pythonpythonpythonpythonpython
a = "my life is brilliant"
result = a.split()
print(result) # ['my', 'life', 'is', 'brilliant']
n = 10
result = 1 < n < 20
print(result) # True
test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4]
print(max(set(test), key=test.count)) # 4

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online