数学建模社区-数学中国

标题: 你猜 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+ jprint(new_students)$ H( J+ I2 Y* x- D5 S6 ?3 B& [) @
1
2 d4 A7 \& {: b! ?5 a! c2
8 F2 Q! S# [+ I7 Y) m/ l; b3/ 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 Y19 C1 f7 ~4 m% v0 q9 a0 e* r7 T
2
( J3 T- F/ x. x. J/ P3* }% x8 T9 ?  J
4
& [( M! A( `7 f" H6 E5
) 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 fprint(merged_dict)
$ K; {$ L+ k* y, k9 c/ c1$ Q$ i8 l- Y7 E1 @- G! y4 k0 N
2
& j: R5 @6 e' K1 A, K. g. S* G6 Q3
& Q8 _; l- e- O, [/ ^8 i) G( w" ^' ]: I4
! P) B* D& L+ o' @* `% e5) N# Z4 M: G# u( m+ W. S& {
如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
8 w  g: V9 ]$ G9 j9 d* I- o, b6 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. kprint(merged_dict)6 }7 ]/ g. m) }: T' S2 X$ @9 w
1! H6 X) H! {. q6 K" I
20 P/ `! C: t! B( Q) N* t5 j& A
38 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 vnames = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
0 X% g3 ]1 J: ~2 n- p
2 l$ _0 K  |9 vun_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' e1
! h9 C# L1 q$ X5 L* D  m/ k22 I3 k# k5 z( f0 s
3  H+ v! l, M/ c0 A
4* w7 i4 _2 D' ^2 k
50 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! t2
& E: C9 ?9 L$ q$ O5 c3
8 J/ ^" n7 x! C: L4
1 y1 x2 d- t4 p5$ L% l* n) S! T3 j8 X2 b
在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:8 L2 v. v& S3 A

' K3 u% V8 [" C( X! r  ia, b, c, d = 1, 2, 3, 41 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 t4  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' s18 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- B1
6 Z, _. K, N) E4 z2
' 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/ Lold_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) n1: s% p8 k; J3 S- V
22 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" T1
) 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