数学建模社区-数学中国

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

作者: 杨利霞    时间: 2022-9-7 11:43
标题: 你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
- G9 g# T$ }+ r) ?% Q+ u
6 z8 u: I0 a; q- z$ v) g文章目录
2 S  U& M* Z: N) E$ V7 X* `; t⛳️ 1 行代码的由来
3 v: n% R" f& G9 q( X⛳️ 列表推导式
# M$ O, h+ L9 c9 \  s) R2 ?⛳️ 合并字典) {; N& q% b: D* N  N8 D: h, U; s  w
⛳️ 列表去重8 `& S- [1 s8 Z4 t/ A# w! O
⛳️ 一行代码交换变量值# E7 a2 g3 ]' @2 y3 A7 P! e0 U( L
⛳️ 利用 print 输出日志到文件8 [/ J0 w" Y5 P6 g
⛳️ 转置矩阵
- ?' i; L6 U4 P$ N9 m& T1 @* X⛳️ 一行丧心病狂的代码  X# A, ^" f  \0 }7 Z
⛳️ 1 行代码的由来
5 n; l6 V3 P7 o) Y+ r. A都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。
1 f2 y- a+ Z+ n- s6 Q# i
" Y3 v3 l& X& @1 q- J/ O所有的 1 行代码,全部依据标准的 Python 语言规范实现。
1 w$ E, k) l0 _* }* v  ]0 F( ?+ L* q& d: L
⛳️ 列表推导式0 l& e- s+ P& G& m
生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。( h* m# P5 a" y  n2 N( y* r
' l4 o$ S2 d8 y8 p
students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
5 |, Y$ N- g; m0 _. _new_students = [name for name in students if name.startswith("橡皮")]  W6 F0 o) C  i; U( I: W" s2 W
print(new_students)
# P! U4 B# @( Y0 W0 b& S) a13 }% k) }% ~2 y
2
. _8 E. W1 }2 O3 S# S/ Y8 I3
6 [/ J5 R+ u4 m6 C上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。& \( A3 o# [2 a" E. y" D

6 f. n' p! K# R, x( D- v" |# o3 ^⛳️ 合并字典, o" J; S) @8 f; n+ }# p
在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码+ {0 X: n0 N  n9 w8 }2 i
8 P4 ?5 O6 u; }; d$ e
my_dict_1 = {'red': '红色', 'green': '绿色'}
0 Q$ m4 ?1 `! i5 l7 Q$ c- pmy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}% B5 u! K& g3 A0 m
merged_dict = {**my_dict_1, **my_dict_2}
1 y: m! R& q3 \2 W9 H  g9 y
- V8 g* P# e$ lprint(merged_dict)
; C) |( x$ c" ]' A3 Z- O9 d* m1+ p& H0 u0 |) s2 o+ I
2
3 d' L! Q: X* R9 j7 r3
+ t' G. }( P1 L# H# \8 V46 D9 U* I8 ?+ s+ u' g/ h1 w8 W: D
5
! W6 \5 ?$ t$ A1 F8 ]) z0 j其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并
8 `  v/ I  W7 g3 f+ W* Q# p/ ]# ~1 M) l: b
my_dict_1 = {'red': '红色', 'green': '绿色'}/ G/ ~' H  y* \! q7 }
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
# j6 e/ w# {4 |& L" x, Bmerged_dict = dict(**my_dict_1, **my_dict_2)
" j* y* N6 b, q( g( C' t
9 F9 X& B- i  R8 uprint(merged_dict)
- M" h0 D/ S; @& j/ y' _  ?% D17 [' I+ d" E: L7 d; O, H
2
5 S7 f: G' Q. F) a) F1 {# F. {3
+ j; P  H, Y& r  b0 b4
( n3 M; D  B: s) w; ]. `( q8 W5
7 ]& a5 H- Y$ O$ S/ O如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。+ n* ^( y$ S5 \( Z& Y% |" X9 f

% V- e5 y  r/ d: k& bmy_dict_1 = {'red': '红色', 'green': '绿色'}
" J! o- T6 f1 I% w0 i7 l! Fmy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
* |' H: U" x. ]' Z) G2 z% _, z! dmerged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))
0 \9 ~1 s2 @/ J' q5 D% Y+ p5 Dprint(merged_dict)
& q3 I6 D2 f+ M% f1 C1+ i  L+ Z! f& u
2
( W& J( Y( X8 ^  q3 ?. F3
1 V1 n1 R/ ?; @4
- z1 t/ u/ q2 g# y$ w# |⛳️ 列表去重7 Q# J# I6 v9 D
在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。* ^8 C2 Y  [& [! @

. h* @: a, A+ r. b' L/ Wnames = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]# u4 _5 I" j* i& D+ |( _" L
! x4 s; a& h' t( w7 G1 B
un_list = list(set(names))/ f+ ~& P( D8 ?  H; l3 K

# c. L! e( V) [print(un_list), l# M8 H" b) o. I; ?
1
) n1 S6 T+ M1 i# z  K) C2 h, A/ G28 k4 b+ v2 E0 {* D; A" T+ W
30 C) ]8 K$ v' o& M1 U
46 C0 e0 O; m# o+ n+ a) W
56 b( M$ a, d4 F! }8 Y
⛳️ 一行代码交换变量值8 {, U- s$ _$ Y# @, }
这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。
, n7 ^5 ~9 B' t+ Z  w2 [3 _: Y$ O! T5 f- M1 ~
a = 1& |6 q/ m. `1 A, C. l1 Y
b = 2) B& J- |3 N6 D$ `$ K
a, b = b, a
: z1 |9 h' \; k, t* n- j  `' Y" y5 s' I* l( o6 S
print(a, b)
8 I, O/ o! |* h, m1
7 p0 D) E, Z9 x# ~$ d  S; x3 T! e2
+ S0 E/ y+ A1 x$ \& D* C34 x+ ~# N9 R% a5 n* J/ Y
4
  M* {& j1 }9 {. q" C2 u1 j4 Y% d2 ^( `55 Z" v  a- i6 z# F+ P3 y, A
在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:7 T: v& g1 `. c4 J9 ^

3 e5 k7 m9 ~( @+ |7 K; ?# n5 ia, b, c, d = 1, 2, 3, 46 _* Z, N: K& P, ~! N& ^4 M/ K
(a, b), (c, d) = (b, a), (d, c)
4 Q) f- T) }  _. R, a- |* Z
6 p+ U* B' s9 V9 S7 a4 fprint(a, b, c, d)( k4 D# q. |7 u# ~8 @7 h
1
6 v! O2 t" q) Z9 x1 c0 H0 c2
$ m7 x' o$ x6 Y9 ]# B3
! Y. E( J- I! K( H8 y4
) ~) ~( N" a5 ^  J7 x4 Y6 S⛳️ 利用 print 输出日志到文件8 i" f2 d; g. p' L7 T
编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。
# |8 o/ J/ O: {# B; J1 A
9 S. j- J$ p" m4 p; @print("Hello, World!", file=open('ca.txt', 'w'))
( h$ Y: u, ], i7 b15 z% F/ N! C: ~
⛳️ 转置矩阵
! a4 i& X) u7 V7 N9 _8 @3 x对矩阵进行转置,也可以使用一行代码实现。
/ u' k  V% Z  d9 `# q1 ]; z* u% Q* A" x3 ]2 m# G# r
old_list = [[1, 2], [3, 4]]6 u/ o9 [0 Z. Z4 |8 T

" V9 k8 R- }3 \/ _. h% `6 W# Oprint(list(zip(*old_list)))7 F  k8 ~% k) G- N% q& U% L
1
* c& `: ~: Z6 [! r2$ ?8 D( Q2 x" i7 |6 D
3
1 K& R# Y- S  y  S9 P4 y但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。
) K' P& Z4 S4 x4 ~0 F" s( I" t/ ~
old_list = [[1, 2], [3, 4]]
8 h$ k0 b2 M. c$ t  kprint(list(list(x) for x in zip(*old_list)))
9 G7 u: O, a, Z( O1
' {9 t( d8 l7 x5 K: R5 Y. I2
' V  d6 p/ P  t: z⛳️ 一行丧心病狂的代码
  |% K. Y% d3 k除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:
3 G0 ?& w7 t" H: n, R# \& Q- c/ f$ F$ o# Z8 G8 k
print(eval(input()))
6 g/ ?6 ?3 ?2 E* _1
# y, m  w- u' J1 f. O, @2 E5 r可以输入单行代码,然后直接输出结果!( u2 Z6 w/ n0 }1 @! i
1 p  n1 O) e9 j. N! Q  H5 T% W
该代码最佳的实践是一行代码实现一个计算器。
% h7 L; p7 {% b————————————————
4 _, u3 M# X1 I$ o+ b5 _版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( [2 e) Q) u9 c5 d
原文链接:https://blog.csdn.net/hihell/article/details/1260949772 D! n" ?+ Z) K! ]: K
: @# M' R5 D% s, I" i& S( `

4 x5 |) ~+ L, N# q




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