数学建模社区-数学中国

标题: 你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码 [打印本页]

作者: 杨利霞    时间: 2022-9-7 11:43
标题: 你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码* s0 U7 d! T! X$ J6 u' A6 c' N
0 Y/ _- K& g1 |) ]* e* \# x- F$ ]
文章目录
5 p: ?8 I; h2 `6 G. c7 F! [* ]⛳️ 1 行代码的由来
/ W6 p! m6 I6 d5 R( e⛳️ 列表推导式
, }  E) A* v1 I  W" p2 t- l$ u/ D⛳️ 合并字典0 x( g$ W& k. q! V. O; B0 {, [
⛳️ 列表去重
! m, W; L. F. j$ _⛳️ 一行代码交换变量值
: O& T; V; m5 M% Y+ j* V% s⛳️ 利用 print 输出日志到文件: D& K2 u% ^% [+ V7 @
⛳️ 转置矩阵
3 ^/ E) W" S" e0 w  D0 k⛳️ 一行丧心病狂的代码& V9 i& a" O9 m! K; v1 E( v
⛳️ 1 行代码的由来
: j! ~9 [- `. Z. a都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。+ b8 E$ _9 {: c  x0 I- n
" z( Z9 }' I9 i8 ~
所有的 1 行代码,全部依据标准的 Python 语言规范实现。
/ H+ U$ k& I. p. A% a% z4 p- P* f# j8 u3 ?  ~
⛳️ 列表推导式
1 A2 B& h! k  g$ N  i- v  ?生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。
; R+ t/ @1 T- |; |' Y& `$ f! M$ v! A! J6 x# B
students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]* e  _$ o( n& j/ ?! C8 J
new_students = [name for name in students if name.startswith("橡皮")]
; B3 y# t, g/ k" p; z3 \print(new_students)
" D4 q0 H& i& g, T1. L* l" S/ k1 c- C( ?
2
& V& X: o0 j. u& W  S32 g) Y3 V& b. S  O" W. Q/ o
上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。! Z. r) N1 I, B. j
% G% Z+ X0 B  Y9 N, p/ l" I4 H) e
⛳️ 合并字典: W- I9 R9 O! t/ d' K6 c1 d0 J7 g4 v' \
在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码
. ^$ |0 l$ y/ n/ Y, g
9 G% s2 L, ^- Zmy_dict_1 = {'red': '红色', 'green': '绿色'}2 A, Y( X) N  q8 N' X4 @
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
, @. `! a; X9 _& F4 Vmerged_dict = {**my_dict_1, **my_dict_2}
0 T" x! P- x6 R1 t
' o, |2 M; ?9 P) b) @* |' }5 U% a- Wprint(merged_dict)
5 L9 S; m/ }& F6 j! d- R13 D* Y# K# V( \/ z
2
1 z9 U4 a; J' q; p: t1 V3' r; C" S9 \+ J  T, A; H
4- I4 Q% b( e9 P
58 w. w1 s4 E3 C+ x# b
其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并4 i9 y0 c7 D7 c- ?5 q
! @* W$ y0 @( `6 ]+ U  P. T; z
my_dict_1 = {'red': '红色', 'green': '绿色'}
* @* Z  ^6 ]. v1 ?0 b- Nmy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
( S) m- D* s4 v" tmerged_dict = dict(**my_dict_1, **my_dict_2)
% t* j3 w7 @7 D4 g
9 J, h+ A9 |' e0 M% oprint(merged_dict), u$ h  L/ ~$ u) b( g* W
12 q: n5 Z, I+ A# v+ a: f
2
' ]+ r  ]" G- ^) Z' G: e37 ]; D8 L6 U+ B, J: ]1 P
4
8 Q4 Q1 E* x9 S5
+ J' j+ ]# j/ w5 ~2 `, s9 h如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
  B4 R. Y* P& x" g! \! \* m1 w  N) T+ v5 D8 `! \
my_dict_1 = {'red': '红色', 'green': '绿色'}5 w  f  }+ l$ |2 p& Q
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}$ J1 _+ R0 G3 s( w
merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))1 P; S) I2 V" Q4 z
print(merged_dict)
% B. W+ x! v/ g( D, p1& Y+ o! x1 M' Y. u* M
24 |$ v. a: |8 O8 \8 o. `, [: w* t
33 X0 f. I* L" O, ~, v
4
8 [7 l) S, p4 k  \' b⛳️ 列表去重$ W% R  P3 |$ r  d' D1 F
在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。0 M7 y; `4 z7 A, P" R" s2 i
% H% V9 m0 z1 H1 }
names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
& _! M; P  a6 f+ [( d0 e9 Q* [
3 S  n- F1 w, u" N& D- U) ~" x9 t, @un_list = list(set(names))
3 J5 G4 N# y% w% ~) z( O: c, G9 l
print(un_list)
( Z1 g" ~) ]1 E0 _1, n* ?, I" \$ _* n( Y. A
28 H. i+ D, A) n4 [; J+ P
3% A# r6 @3 L! b
4
5 i* k1 m* v4 X2 a$ b5
; H1 O8 E* _; A8 q* V1 C$ y: c/ \⛳️ 一行代码交换变量值& x8 u- M- t4 s. N+ J! ~1 t2 r
这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。
. q' H* h1 Y; T7 [) N
' D, s" X( Z, }1 o/ c' [% M9 t: fa = 10 A% M5 _* N$ \2 _
b = 22 @6 q/ O! X6 @$ f
a, b = b, a. Q5 O! b. _( L# Q% O$ f
; `- U, b) z' Z
print(a, b)+ g2 U, r3 Y2 W; W2 `
1
; V& \) ?  N2 J5 L% G6 l24 F: @$ b! O& m. z4 q
34 l9 J- X3 g, J# m) y$ h- z9 ~& H
4* }, m2 U. C8 w0 Q3 \3 {, x
5, B' c( L0 O- P. Q
在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:9 z2 J, k& j2 \
8 m! l8 s" b- t& ^
a, b, c, d = 1, 2, 3, 43 t) c4 W! a# N3 e
(a, b), (c, d) = (b, a), (d, c), u) `% D$ V1 B( n* M  c

5 f$ E& f3 H7 Z7 p5 ^- dprint(a, b, c, d)
2 M7 u% ]- \% d, S6 E1
2 J. k1 R. o7 u0 C1 _( `: Y; Q/ a2" x, q9 y/ X) `. D$ m
3& Q; j: O# ~% O) c: V! x0 P
45 K5 |- I( S$ c. r4 a! l7 W
⛳️ 利用 print 输出日志到文件2 i7 Q7 r$ k; }3 ~: o/ f5 |) J
编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。7 T/ d$ g" h% Z. [  \

7 c  r4 p/ T3 W+ W9 v% u3 Kprint("Hello, World!", file=open('ca.txt', 'w'))( c: J& Q& [' f1 {
14 c: q' @: K7 n3 q7 P+ w/ L) O
⛳️ 转置矩阵
' C% G' |; q& }5 g  D. c# J; ?对矩阵进行转置,也可以使用一行代码实现。
$ o3 m% \  M! c1 G. f; e6 Q# U4 d2 s
3 t2 {$ ]) D; Z' Xold_list = [[1, 2], [3, 4]]
8 a! D' ]) t2 T, j" [6 c9 S
# U# J6 `) H6 v4 R. ^% oprint(list(zip(*old_list)))
4 S  ~: W( y* ], g# J  b' e) n) w1
9 P1 E% i3 w) q' a3 R2/ Y. P' O( i5 V8 \0 ]
31 n+ ~1 \* }1 b- e3 u
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。6 B& M: |% p7 s
( E% @0 n  T/ G$ D/ \" x+ y/ \
old_list = [[1, 2], [3, 4]]
) ^; C/ M3 L5 \" j7 I$ t7 dprint(list(list(x) for x in zip(*old_list)))
# _, n6 H, [) X+ G0 a1
& S; t0 M& w. D, B% L2$ H  i# U5 B" k3 i. F9 ]% }
⛳️ 一行丧心病狂的代码
! a3 L3 j: Y" B0 d% i: q% `除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:) O8 U2 N+ J0 [
3 o. ^! g/ _- b$ h) h& U9 D* x) _
print(eval(input()))6 z% I* c$ f5 h! B
18 N! |! x$ @6 h$ {" t! b: D
可以输入单行代码,然后直接输出结果!$ a/ k8 p: u: k

( ^2 A& ^5 W  b! q0 Q/ H' P该代码最佳的实践是一行代码实现一个计算器。5 L+ @- F( \8 n  }; F7 m' i
————————————————. |: x4 G* J) Y! u2 ?0 v/ @
版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 g: A/ |% T( |, O
原文链接:https://blog.csdn.net/hihell/article/details/126094977' J- A; r' z+ O* A* U0 g( n- k
1 r" u: b( K$ c. {5 v
) z3 @0 f' c' w2 N# _





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5