数学建模社区-数学中国
标题:
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
[打印本页]
作者:
杨利霞
时间:
2022-9-7 11:43
标题:
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码
E; i/ i$ Q7 w# m p- Y
1 |) 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# K
students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
& b, A/ F. x6 {) w7 u
new_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 Z
my_dict_1 = {'red': '红色', 'green': '绿色'}
$ p X5 o3 h' k4 b! w1 H2 K
my_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
1
1 G/ }; z9 _2 l
2
' R% e' X! P, O* A$ j- C
3
7 z! P4 \2 f% d; d7 W0 Q" P
4
* R9 H; K* W I8 N' D2 I2 ?- x
5
2 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 E
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
. A7 u8 p) o* P
merged_dict = dict(**my_dict_1, **my_dict_2)
7 W9 q" o! K7 i+ ^% a* s- f
9 E. c8 Q- r! ]* j8 X/ h
print(merged_dict)
3 n; }2 @ j; g" ]! ^
1
3 R5 R3 ~, A- r
2
2 S+ F1 Z1 o" N1 B
3
# B7 b/ J3 S1 R
4
% l' D* I8 y6 W
5
- P* F ~8 k* r0 J9 c
如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
; s9 n" x) u$ z0 b+ n) Z
( f' Y, {7 l: z" U/ P1 T
my_dict_1 = {'red': '红色', 'green': '绿色'}
5 G0 S: a" S, T [. }2 f- J- W2 v
my_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) x
1
4 x& a# J* W: W, Q
2
- 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 W
print(un_list)
( z4 c" L- @1 y* @4 S, e7 s
1
! y K3 v( e5 R. S2 J: m8 V7 T) J
2
* t2 }! t7 Z0 Z/ [$ R# U& e
3
5 T- n+ m" Z1 d1 i9 v8 ]% P$ f
4
) S8 @2 o/ C' s9 f' J
5
7 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 = 1
8 {0 d7 p0 `8 J( B7 w d
b = 2
9 q/ w: y2 r% V6 p1 N
a, 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& `" Y
2
5 _/ Q9 d6 v+ H
3
! R* B0 E$ L! Z Z/ C+ Z5 d; I
4
+ `+ X3 X9 D! ?( d, Y; R$ g
5
* 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 D
print(a, b, c, d)
2 _/ \2 p" d9 D
1
( S& Y: H7 d8 Q2 s
2
, y: @# i; J3 g/ I3 ]7 d$ `: t
3
; |0 L) _8 [0 V+ Z2 O8 S w
4
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/ H
print("Hello, World!", file=open('ca.txt', 'w'))
# k" Q0 @9 o: Y! \/ p( i6 F* T! f6 G
1
% Y4 h! n% W0 S+ t# o" F
⛳️ 转置矩阵
$ z9 m; C7 X5 [
对矩阵进行转置,也可以使用一行代码实现。
" F8 x8 ]( d- l. Q# u
9 h7 w* b% i4 }- I
old_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/ t
3
7 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 W
print(list(list(x) for x in zip(*old_list)))
! E5 U) v' D" c) r: T
1
' l1 l% R5 x% d" j
2
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 u
print(eval(input()))
# E, q/ r& I Q2 M: a% z8 r/ [
1
5 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