数学建模社区-数学中国

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

作者: 杨利霞    时间: 2022-9-7 11:43
标题: 你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
  E; i/ i$ Q7 w# m  p- Y1 |) r8 G  X9 `, b9 c* B
文章目录  q% C* U. O" c  a
⛳️ 1 行代码的由来- l5 ?. R1 I2 X; s& D7 s, d8 z$ G& G
⛳️ 列表推导式
$ F0 l* Y- u, t% Y! Y⛳️ 合并字典$ W* \: R+ o4 `
⛳️ 列表去重! ]( E6 i$ ^! p. j4 E- F
⛳️ 一行代码交换变量值8 w* a/ k$ `( h+ h4 D3 D& B
⛳️ 利用 print 输出日志到文件
) Y& I# J' G+ ?! ^* `⛳️ 转置矩阵* w# C7 C8 r# K6 Z  u
⛳️ 一行丧心病狂的代码9 J: N- G( t4 D  D: }
⛳️ 1 行代码的由来$ z5 j9 K- W0 O9 b* i# z- v9 O
都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。' [3 ?6 u1 j  }( X/ D2 c  k5 t. [7 G

, r0 w" Z  t* Y* X# j所有的 1 行代码,全部依据标准的 Python 语言规范实现。2 q, P4 J: U  Y8 t" _5 t
+ e! L7 P8 n" T: `4 _' Z
⛳️ 列表推导式9 ~! W& l( K4 s1 ^1 D" P
生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。
6 o6 J: V' V, X/ u
! T- }/ _4 Z1 ], o# Kstudents = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
& b, A/ F. x6 {) w7 unew_students = [name for name in students if name.startswith("橡皮")]! l" c/ a4 ?# J, b  E
print(new_students)( J' d* I) E. W) I
1! s' Z3 g" ^8 Y! K7 X: n3 @- O! d
2
& v' y& h* E% J7 O: ]7 ]% ^3
8 G- l2 B5 `* j8 ^5 j2 S上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。
$ \# S+ e, H. Q' W( o' ~& G+ b* b: N4 [2 H8 {
⛳️ 合并字典
6 h4 \8 e3 c8 o在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码
3 y) ?( k* y4 l# L4 X
% V5 o& s; m8 _8 w* O, c5 Zmy_dict_1 = {'red': '红色', 'green': '绿色'}
$ p  X5 o3 h' k4 b! w1 H2 Kmy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}& U( p. Z  d1 ~& o' m8 t, _5 v( Q
merged_dict = {**my_dict_1, **my_dict_2}7 g& l9 ]& ~- U( T/ i$ D8 S
( a: S' c# Z3 `
print(merged_dict)$ a0 _( T( r! A2 S
11 G/ }; z9 _2 l
2
' R% e' X! P, O* A$ j- C3
7 z! P4 \2 f% d; d7 W0 Q" P4
* R9 H; K* W  I8 N' D2 I2 ?- x52 c2 s" x& q! _8 ]
其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并1 M+ }. g- d7 f; v6 o  [  B
2 {. D; m. F0 ]: Z+ X
my_dict_1 = {'red': '红色', 'green': '绿色'}
9 v% N4 n6 ~1 Emy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
. A7 u8 p) o* Pmerged_dict = dict(**my_dict_1, **my_dict_2)
7 W9 q" o! K7 i+ ^% a* s- f9 E. c8 Q- r! ]* j8 X/ h
print(merged_dict)
3 n; }2 @  j; g" ]! ^13 R5 R3 ~, A- r
22 S+ F1 Z1 o" N1 B
3
# B7 b/ J3 S1 R4
% l' D* I8 y6 W5
- P* F  ~8 k* r0 J9 c如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
; s9 n" x) u$ z0 b+ n) Z
( f' Y, {7 l: z" U/ P1 Tmy_dict_1 = {'red': '红色', 'green': '绿色'}
5 G0 S: a" S, T  [. }2 f- J- W2 vmy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}+ I2 h2 j# d+ X( ^8 F) `9 `$ H
merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))# @- X% I7 e% W' _7 h
print(merged_dict)
( |6 ^5 m( C' c: ~/ R% x) x1
4 x& a# J* W: W, Q2- g8 O: x# c# }+ |0 r  ^
3! Q2 I0 k6 m+ W
4
3 M0 ^; @. i# r4 s2 T⛳️ 列表去重
, `. z' j3 g2 [- i0 d! R. {在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。
% c, k* s, r1 J' }
5 _2 [) A$ L% L5 U2 E9 f* _names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]; ^& f; m! `" [; c
% U& w1 h! L( d0 I/ x
un_list = list(set(names)). J( T7 S9 O8 F3 [' L+ f

6 `! Q( x9 M( n; T6 Wprint(un_list)
( z4 c" L- @1 y* @4 S, e7 s1
! y  K3 v( e5 R. S2 J: m8 V7 T) J2* t2 }! t7 Z0 Z/ [$ R# U& e
3
5 T- n+ m" Z1 d1 i9 v8 ]% P$ f4) S8 @2 o/ C' s9 f' J
57 D( i: `! u$ u; {% ?
⛳️ 一行代码交换变量值
; S/ @- b% K* t, s9 |2 I这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。; W4 v( b+ `4 @
; {3 z5 Y' b. z5 |& h* o. d  h
a = 18 {0 d7 p0 `8 J( B7 w  d
b = 2
9 q/ w: y2 r% V6 p1 Na, b = b, a) d3 |$ H8 L1 r& |, w7 W
# H7 m" m8 Y4 F: q" w7 s
print(a, b). W% x9 p, v& E; M$ P: R6 z
1
5 W# x( O3 Z9 Z& `" Y2
5 _/ Q9 d6 v+ H3! R* B0 E$ L! Z  Z/ C+ Z5 d; I
4
+ `+ X3 X9 D! ?( d, Y; R$ g5* f: D- t5 T& \9 @
在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:4 Q. T7 ~7 m$ f, Y
2 _' @: f: \$ \( ]! w7 N- U
a, b, c, d = 1, 2, 3, 4/ f# K- u  D( y9 n, ?* Z
(a, b), (c, d) = (b, a), (d, c)# Q5 P" X+ |" E* V/ ~# t. k% G

) a& J( q3 W: `+ U0 v" I* W1 Dprint(a, b, c, d)
2 _/ \2 p" d9 D1( S& Y: H7 d8 Q2 s
2
, y: @# i; J3 g/ I3 ]7 d$ `: t3
; |0 L) _8 [0 V+ Z2 O8 S  w4
2 x7 {* x! ^, g9 Q  k1 v  D⛳️ 利用 print 输出日志到文件- g9 c. o, f7 w& p+ t: A
编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。
8 p# @+ O, L& @# c" u
0 x) z2 `7 ~' p0 t, S* u/ Hprint("Hello, World!", file=open('ca.txt', 'w'))
# k" Q0 @9 o: Y! \/ p( i6 F* T! f6 G1% Y4 h! n% W0 S+ t# o" F
⛳️ 转置矩阵$ z9 m; C7 X5 [
对矩阵进行转置,也可以使用一行代码实现。" F8 x8 ]( d- l. Q# u

9 h7 w* b% i4 }- Iold_list = [[1, 2], [3, 4]]
7 w4 I* y7 u7 E  J4 ]( O1 ?" X( x# M8 }) E
print(list(zip(*old_list)))
+ Y2 z4 B8 {( F$ b4 ~1" W8 a7 l! a. k
2
$ I% g) @; j1 T+ k% r/ t37 Q/ W6 v( k% i: G, t$ `5 t
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。6 O# u9 r, H9 d1 ~! g
6 g! n- z2 g1 l  n
old_list = [[1, 2], [3, 4]]
1 l, e8 W5 f5 n( M3 Wprint(list(list(x) for x in zip(*old_list)))
! E5 U) v' D" c) r: T1
' l1 l% R5 x% d" j2
7 N& x2 k- R7 S) G8 [: F+ p3 E" u⛳️ 一行丧心病狂的代码2 b* Q( S9 y% r# v2 q  q* c
除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:, N3 |# r' A- l8 X

) x+ z- Y' T+ s0 Z! A3 uprint(eval(input()))# E, q/ r& I  Q2 M: a% z8 r/ [
15 T% E. h. c9 }" q
可以输入单行代码,然后直接输出结果!+ A) U; p' h& w7 m

1 P* _4 R! i' f, W该代码最佳的实践是一行代码实现一个计算器。0 |; w2 K2 k: x: E# t, i% x5 o7 x
————————————————
& F0 h! J) P( A/ g版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。! v8 t: A/ _3 @- |: N. x" M
原文链接:https://blog.csdn.net/hihell/article/details/126094977
1 {+ X. f- R  n' d3 ]2 \4 @  ~1 G9 Q* M& m
( O) F) N9 F+ v4 {





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