数学建模社区-数学中国
标题:
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
[打印本页]
作者:
杨利霞
时间:
2022-9-7 11:43
标题:
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
2 D; K* R/ m; ]( o: K. n3 l: q
1 S b. d5 e# y* k+ H2 x) K, U
文章目录
) w5 n) V4 |& v& O, f
⛳️ 1 行代码的由来
; O3 ]) _& f2 D* J
⛳️ 列表推导式
5 m; `% k3 `% h2 K; E
⛳️ 合并字典
1 M" _2 ]! q1 D5 \* e" {3 j
⛳️ 列表去重
[$ j1 t3 F1 o
⛳️ 一行代码交换变量值
( k8 m1 u9 f+ j3 ]' c6 k0 E
⛳️ 利用 print 输出日志到文件
/ ]% b5 G( H0 @" ] l
⛳️ 转置矩阵
! {: @. q; a: d. j/ I7 T# i; C
⛳️ 一行丧心病狂的代码
7 r6 R5 l4 K$ z# g {
⛳️ 1 行代码的由来
q' o( Z" ?2 X/ c" Y& P: @; p6 E
都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。
' B" r* Z2 M& h" D. [8 u# u
" A" H: f) ?& d. l5 m
所有的 1 行代码,全部依据标准的 Python 语言规范实现。
; I0 o; A, n8 c' A. A3 t
6 Y3 A/ e' O; A
⛳️ 列表推导式
& l3 j% u! a5 t' Y
生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。
7 Y; z+ i% ]3 F
/ e: \. H. B- ~# q2 D
students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
0 h& @* a1 K( j1 r* A8 j8 m
new_students = [name for name in students if name.startswith("橡皮")]
2 Y" ]4 Z; N0 z3 D' Q+ j
print(new_students)
$ H( J+ I2 Y* x- D5 S6 ?3 B& [) @
1
2 d4 A7 \& {: b! ?5 a! c
2
8 F2 Q! S# [+ I7 Y) m/ l; b
3
/ a6 x# y, f! _' \6 l4 h& \
上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。
8 U% J* T4 \5 Y0 f
1 u1 n: }, U* q( ~. q8 a
⛳️ 合并字典
( n$ g$ c$ L0 V9 S% n
在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码
) B( }" k3 y+ d& F5 H
8 c- R. K6 k& w1 l% h# N
my_dict_1 = {'red': '红色', 'green': '绿色'}
3 O% y8 y. \! N1 ]; O1 [. h5 x) `
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
( E$ v8 k; t, M' h. u0 q
merged_dict = {**my_dict_1, **my_dict_2}
" A% q4 D4 p4 m+ s& Y
& ^- m, Z4 d5 j, ^5 p
print(merged_dict)
$ {9 K; U8 U: O, s; i6 b. D. E1 a5 Y
1
9 C1 f7 ~4 m% v0 q9 a0 e* r7 T
2
( J3 T- F/ x. x. J/ P
3
* }% x8 T9 ? J
4
& [( M! A( `7 f" H6 E
5
) F( P C( _2 I" K9 ^
其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并
, u2 x& p; g+ F, M
/ M; q. V0 G, p. s6 A9 R- Y; J
my_dict_1 = {'red': '红色', 'green': '绿色'}
; Q& ~8 I! F% J* H2 e8 ^
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
' w3 M8 @* X2 e0 ]
merged_dict = dict(**my_dict_1, **my_dict_2)
* y/ }( q1 H m4 ^& R% P; Q
0 Z! V! u8 n( @. ]+ c8 f
print(merged_dict)
$ K; {$ L+ k* y, k9 c/ c
1
$ Q$ i8 l- Y7 E1 @- G! y4 k0 N
2
& j: R5 @6 e' K1 A, K. g. S* G6 Q
3
& Q8 _; l- e- O, [/ ^8 i) G( w" ^' ]: I
4
! P) B* D& L+ o' @* `% e
5
) N# Z4 M: G# u( m+ W. S& {
如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
8 w g: V9 ]$ G9 j9 d* I- o, b
6 k( g0 U* P2 o- `5 y4 V: b' Y8 |
my_dict_1 = {'red': '红色', 'green': '绿色'}
1 k9 y" l! a6 m! q* _; ~
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
& n6 [& ]! z3 i, g$ x8 H! N7 q
merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))
; [$ D6 O! D: X0 e2 a9 N. k
print(merged_dict)
6 }7 ]/ g. m) }: T' S2 X$ @9 w
1
! H6 X) H! {. q6 K" I
2
0 P/ `! C: t! B( Q) N* t5 j& A
3
8 W( G2 {' m) e3 `
4
, Y; |: n6 z2 r" T5 ? Z2 [/ b
⛳️ 列表去重
% n+ O9 k# J6 r( g1 Q. ^# P, O
在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。
* @* [+ \9 `, I& ]
/ ~; T; x9 X* B4 P1 N( g1 v
names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
0 X% g3 ]1 J: ~2 n- p
2 l$ _0 K |9 v
un_list = list(set(names))
0 x, q# c7 N7 w, D/ u1 B
: u. j$ ]0 ~; \; }
print(un_list)
2 O5 G8 I- [- t; N G' e
1
! h9 C# L1 q$ X5 L* D m/ k
2
2 I3 k# k5 z( f0 s
3
H+ v! l, M/ c0 A
4
* w7 i4 _2 D' ^2 k
5
0 b( n `0 d$ A. ]; k
⛳️ 一行代码交换变量值
" P) }( ~' ?; m, [' {' r7 v
这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。
2 N: i* f2 P+ D2 A2 s1 p
7 g1 M) P0 ^0 p% O
a = 1
- Y2 n( e3 a* S% v* H1 z9 e: `
b = 2
% L3 J2 B2 N0 }4 w z1 a
a, b = b, a
( L+ u8 @9 k/ {% L
7 S) W5 E( U3 t. y, F0 F& k
print(a, b)
' @& V) H7 X7 G; ?
1
- H. K- j3 |7 A5 P$ {4 M0 s! t
2
& E: C9 ?9 L$ q$ O5 c
3
8 J/ ^" n7 x! C: L
4
1 y1 x2 d- t4 p
5
$ L% l* n) S! T3 j8 X2 b
在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:
8 L2 v. v& S3 A
' K3 u% V8 [" C( X! r i
a, b, c, d = 1, 2, 3, 4
1 v, \: @ P6 }* N+ A% f
(a, b), (c, d) = (b, a), (d, c)
; D6 r5 I+ [/ A, x# @
3 k {9 M! ]9 @9 j4 r
print(a, b, c, d)
" ?! c+ s! O+ |7 y* k
1
) A3 a Z- \$ e G6 ^, `
2
" S9 N* h7 w0 u, |& \
3
+ |. f+ Z, ?4 A; s7 |* Z1 l! i2 t
4
C& X2 a7 g7 n/ F) I! L
⛳️ 利用 print 输出日志到文件
7 x$ T8 x% ]% H
编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。
8 q. a" a- M$ w, n$ b( Q: h8 z- m$ \5 h
5 G8 I1 i' d z# i0 u
print("Hello, World!", file=open('ca.txt', 'w'))
w) Y( u t* k5 c' s
1
8 U& r, O+ Y$ @# |3 {" r0 E
⛳️ 转置矩阵
) o' A, Z+ n( |1 q1 b; V* g
对矩阵进行转置,也可以使用一行代码实现。
, @. U4 B. N) X Q, R+ O+ d
8 J" _# r y% q' A9 r( ^7 Q4 i3 t
old_list = [[1, 2], [3, 4]]
& h$ }6 G& R8 @/ E, ~" N
" x+ u2 H( o) _- h* D; `5 i
print(list(zip(*old_list)))
& e, O1 L7 b6 U: i/ i- B
1
6 Z, _. K, N) E4 z
2
' I2 A. q) d5 A# w! E9 k- W! ]
3
6 f; u2 i* }1 c3 v4 j
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。
; B9 \% m% r& {1 g- w+ s
" c( R' e* G x; P/ L
old_list = [[1, 2], [3, 4]]
. h) e6 T- c9 [3 G* l7 g$ y
print(list(list(x) for x in zip(*old_list)))
3 C# I! Q. J- L9 D: F6 z( M) n
1
: s% p8 k; J3 S- V
2
2 w9 {9 o9 c. x) y1 s g6 T5 F6 h& z7 d9 S
⛳️ 一行丧心病狂的代码
/ O: D# b) n4 ~' E3 V4 p5 [
除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:
; k0 @( ~* S* d, y; F( k% p+ [ Y
$ c$ s$ }7 G: P# ]
print(eval(input()))
7 C+ I5 N' X& M& b* l% U2 Z" T
1
) r$ u+ T# D% v* h( x8 x {
可以输入单行代码,然后直接输出结果!
6 x' q6 b, E& k! u7 ?5 d0 I
* M( O. w0 u1 B' S
该代码最佳的实践是一行代码实现一个计算器。
4 V* D- W5 u$ T0 `! D& c
————————————————
2 D* g: `. y4 M) ]6 U
版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
% v2 h0 K" I( b6 F1 T& ^' c+ R
原文链接:https://blog.csdn.net/hihell/article/details/126094977
/ _. ~* p6 c/ Y9 Z+ }
$ _5 ]5 [% t/ A
! I9 t) a. ~/ F. N* _* e
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5