数学建模社区-数学中国
标题:
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
[打印本页]
作者:
杨利霞
时间:
2022-9-7 11:43
标题:
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
4 g- B. n% i. h: Y) h. z
; v; ]- I% w3 | X# O# K
文章目录
8 U" l* ]$ H( G6 g
⛳️ 1 行代码的由来
5 ~8 J4 o; |. n' ~$ K0 z6 Q8 G
⛳️ 列表推导式
+ O( r) h, u" P1 O# h, x
⛳️ 合并字典
5 Q' z1 p! | {: Q9 s
⛳️ 列表去重
6 |9 \& r" b/ B3 D2 t/ Q5 T
⛳️ 一行代码交换变量值
0 u3 ?) v2 J& \3 B
⛳️ 利用 print 输出日志到文件
8 d1 x+ d& H5 R. n: `
⛳️ 转置矩阵
3 H) b% G x; O5 S! w; P
⛳️ 一行丧心病狂的代码
$ V1 Z" c" D# V
⛳️ 1 行代码的由来
$ B% i9 o3 t7 T3 d0 ~
都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。
5 K4 Y% D3 ~' C# y
2 N. ^- t/ v- C& v# i: J" y6 p
所有的 1 行代码,全部依据标准的 Python 语言规范实现。
' D+ a2 }3 q1 V
9 V- {7 e- l" M2 m6 j4 ]6 ^: j
⛳️ 列表推导式
8 I8 L5 Q' w; I: v. o; O
生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。
9 g' z' H$ N% v2 I! b1 G
9 u# D( m2 [( k; m
students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
6 v8 |4 m4 g1 @( Q$ L9 |
new_students = [name for name in students if name.startswith("橡皮")]
: S' B9 k3 G6 P( O1 a4 \
print(new_students)
/ B0 @* l; f) { a0 c: B- l
1
. M# Q/ ?* }+ b g1 v# k9 K
2
9 v) q* v1 ]& a9 E
3
2 H4 Q) U7 b/ T' c. w' w
上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。
; W8 `1 h) ?. B/ S4 }
7 }% B% D+ m8 m/ u. |0 p
⛳️ 合并字典
( q( y0 ~% L& X" G$ R; i$ q$ y# k
在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码
3 ]2 S& Y3 U0 s2 R$ ~/ k. o
0 T/ A7 }8 Y% f: h, P8 e* \
my_dict_1 = {'red': '红色', 'green': '绿色'}
* D1 r4 M% b! l8 U8 \9 p
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
* h/ D) P' W) D, n7 p7 ?
merged_dict = {**my_dict_1, **my_dict_2}
$ i* i8 x8 ~+ u6 P: y [
" s! i8 |& r& Y0 ]
print(merged_dict)
- ^& w6 L: p; C7 d1 c/ }1 W
1
# |2 C) u/ @, }9 }
2
4 a9 Z* P% C1 E+ n: q
3
. s: k* b" D1 v
4
+ f; f! Y. V: x) _& d. U6 S3 n
5
" ~ [% w. N& u$ {$ p% f7 ~* A" }
其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并
$ s. s: O. Y2 W* u- @
6 [0 O/ Z, `" M- D
my_dict_1 = {'red': '红色', 'green': '绿色'}
& d& H# D6 u, e# d+ h0 k1 G
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
. T& P+ h) T+ k" K Y2 n# N
merged_dict = dict(**my_dict_1, **my_dict_2)
% u: O6 k, p( W8 g
/ L) O) S2 E+ y* x
print(merged_dict)
6 C: |3 o& v1 Y% j" F! N: ]2 k/ z
1
0 `' _: H) A; I" d; [
2
; `) f! P8 x! ^( r
3
' C3 R2 Y; r; M( k3 l
4
, m7 Q4 E0 Q& H3 a" h- e
5
. L5 J, e+ _% P8 p3 e
如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
3 R# |" H5 p, k+ F
, S$ \- m, o* Z. r& e
my_dict_1 = {'red': '红色', 'green': '绿色'}
6 ~% b' s+ ?, x; b& H+ y* u
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
2 b& d4 @8 `9 l
merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))
6 S7 `. d) f. v
print(merged_dict)
+ e! W% R2 ]/ R/ Z4 S
1
. d( o) \4 h3 E0 h7 R
2
% ]. V9 X# N7 s* J3 F( L- x
3
7 W& R4 o" R- I+ v6 V5 U8 w
4
+ G# e! W7 D; ]
⛳️ 列表去重
3 n$ Q* K! _! o! C; W* i
在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。
- u/ ]+ ^" T" N2 Q% k2 y
/ ~2 O8 U! j/ ^! e, N% L% d
names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
$ X6 r* L7 F! x+ R& K
2 w, j( U4 {3 h4 ~+ R
un_list = list(set(names))
5 D. Q }5 x: R* ?5 @ R
9 K e9 L( S a$ U' U
print(un_list)
& n4 G: B: U; |) |8 r
1
, Q" @9 r! s! O* d+ G+ w
2
# s7 k- E$ s! B0 e1 H5 b
3
/ h' y6 o2 e* w5 E% H
4
6 r9 J# O/ k w0 G8 e _4 \
5
$ F* g5 Y" h: \* R% h/ r
⛳️ 一行代码交换变量值
1 w' J5 l7 D, ?6 c
这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。
7 U0 R3 P" h4 R5 Y8 i, b
. H5 c) ~2 b' W; j- r4 k. {
a = 1
" ?4 a9 [3 c. e' p
b = 2
5 ~' D2 b5 ]* M: h8 m/ C( I, k( r
a, b = b, a
, i# X. A2 W3 U/ l) B
6 L g$ K: e$ E$ i2 S
print(a, b)
7 o) }5 n$ P$ f+ I
1
6 \, @+ W# v* r
2
Z7 E0 Y% v) e: ^; i
3
# e6 K, D- R1 O6 [# Z7 y1 m
4
2 y( C2 ^9 {) P
5
/ {; u W j6 Q1 A5 P) X G$ d
在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:
2 [, Y/ b( z* M3 ^9 ~8 |& A
p' t7 o$ a7 R/ b) Y6 |% b. u: b
a, b, c, d = 1, 2, 3, 4
! I, R0 r$ D* b- C" `3 o5 n
(a, b), (c, d) = (b, a), (d, c)
6 y# F. d! F! r" b7 x5 l6 Z" c2 o% ^
- Z8 z8 w8 }# l! O0 j
print(a, b, c, d)
, N0 J+ v* B) p
1
' l7 _- c3 Y/ E7 |: o
2
~& C6 Q% J- h% L, p& H; B
3
. Z: k: A7 K4 W, Z/ x; j3 o z
4
2 `% F+ y/ _# k) U) O4 w
⛳️ 利用 print 输出日志到文件
+ Z6 @. @: ]% K7 X5 F! c
编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。
7 f6 L3 q3 K* ?; E6 J2 M! n9 G: }
1 m& L, L+ p" [6 f3 _3 t
print("Hello, World!", file=open('ca.txt', 'w'))
, R5 e/ d4 H7 m4 h, f' W; H
1
0 V u7 [6 }0 J. W
⛳️ 转置矩阵
) p/ M) K# p$ y. C# k3 N
对矩阵进行转置,也可以使用一行代码实现。
+ R5 x" @4 J0 T9 l' j. y- \
% z/ D7 s" o3 L: ?; N
old_list = [[1, 2], [3, 4]]
! |4 ]% p) z; j: l" F/ B
1 H3 ?$ h, z# @* g# u
print(list(zip(*old_list)))
1 b+ v) o5 Z( A# M# f
1
8 o4 N; x! [& o- r
2
) T- _, m0 {$ ^8 Y! a
3
0 a$ H6 h8 T1 i2 u9 f7 \4 R3 [
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。
' m0 D6 d# G7 |1 V! E* Z. v
7 b8 l/ G7 ]9 y$ c. y! s
old_list = [[1, 2], [3, 4]]
8 U3 L+ i3 A1 `5 V7 O; l
print(list(list(x) for x in zip(*old_list)))
% O1 _+ u- b# @6 G
1
+ o6 X: O/ Z1 r( V
2
2 P/ @ N3 K* f# i& y! v
⛳️ 一行丧心病狂的代码
5 b$ Z2 X" M8 a
除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:
: v4 V+ b/ H, I2 V; p7 |
2 L* F: @. o- z5 Y- T0 \4 m# P
print(eval(input()))
5 A" s* d u! e& A* [7 X+ b
1
* \& M2 x4 c8 ^, t" _/ I
可以输入单行代码,然后直接输出结果!
8 Z" q' x8 ^: g4 O9 {. z
( @+ i$ v) e0 t3 [0 Z& n0 }
该代码最佳的实践是一行代码实现一个计算器。
' T8 X4 U" L4 y5 ~: Q" z
————————————————
9 X8 c7 P+ m' i& h
版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
, v3 f; o5 c7 O" R2 u
原文链接:https://blog.csdn.net/hihell/article/details/126094977
: y$ G6 n5 H, z* V6 N
- [7 @# g3 J' N* U6 u
/ Z9 I9 ~( Z# s1 Q) `- ]6 T
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5