- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 567260 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175401
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码: \& F/ j, f+ w) e$ r! Z$ F$ F0 t' Y
8 c! r" p. J1 |! T: W文章目录) n( @" C' ~% Z# B9 X1 F) A% y! a
⛳️ 1 行代码的由来
5 y' R. f1 \! u. P⛳️ 列表推导式
9 H2 M. ]3 t9 g⛳️ 合并字典
6 d: X; G% ~" A, p" S" H& r⛳️ 列表去重
$ C7 m2 Z! V& Y/ p& C" h⛳️ 一行代码交换变量值
& R/ ?3 }! @* ^/ w, y. D⛳️ 利用 print 输出日志到文件7 B1 m4 K* S- y% Z- g8 F% C- ]
⛳️ 转置矩阵
+ H5 R0 _7 ]# J J! e⛳️ 一行丧心病狂的代码( ?# F, I# X9 e: e+ H% L
⛳️ 1 行代码的由来$ Z( H& x. A2 O
都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。( C2 Z8 k% M% {$ T
3 {7 x9 Y( D; ^4 z- Z
所有的 1 行代码,全部依据标准的 Python 语言规范实现。
9 b& J7 C9 A6 [
( H: R' a" o: Y⛳️ 列表推导式4 u7 p* F' H6 q; @( J9 h
生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。4 K' z$ [" K1 j2 P& J, H; r
- `( u: S6 M* h
students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]2 Y' A8 U% C- p- W0 z& @
new_students = [name for name in students if name.startswith("橡皮")]
0 q, s5 Z+ [1 \6 i& wprint(new_students)
# z2 E2 B* P0 Z& W& R. U* y1
# L P9 ~- z+ s" C0 O! ]2
, _: R8 V5 ~* Q, |) D% y% }4 u3
1 g( \4 O1 {" B2 i1 i5 }) a上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。
1 u. D7 ] @4 e. i. |8 H0 M/ @
. ^0 @/ S, m) {2 ~$ S, M6 P# h⛳️ 合并字典
! g$ j! K0 N" Q6 ?! L在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码( |- w' z. Y4 g) X- n
- A5 V$ h7 \8 v9 J/ G
my_dict_1 = {'red': '红色', 'green': '绿色'}( S, r# V' G% u: ~
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
+ ]. ~; y/ N! T0 j/ Q* |merged_dict = {**my_dict_1, **my_dict_2}; ^# d+ n+ L/ d) x) _- R/ F- I
8 w9 `" z5 q' y7 D0 K3 k( G) a, L
print(merged_dict)
: P% D5 Y6 K( v6 P17 T$ ?) R, ` f9 l5 d! b; P1 t* ]
2/ M) H# }' ?; y6 a4 ?) z4 S4 Z
3
, W& F9 P0 b8 Z+ M4 Y$ F4
2 X* N" P1 r) U) ?8 P# |7 ]5
8 u& I# V+ w7 n) Q P其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并: o+ g8 y! Z3 r8 m4 ~' i
+ ?! t. W" ^0 \4 A- e
my_dict_1 = {'red': '红色', 'green': '绿色'}
u( T% m- |! kmy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}5 t# b' d a6 x0 j4 H
merged_dict = dict(**my_dict_1, **my_dict_2); p6 |6 a6 X* Q+ D: x2 a" ]0 c* k
1 `8 @8 d6 r5 Wprint(merged_dict)
0 a0 j1 ] P7 A1
, Q8 ^6 g$ E/ u) X2
# X- j( ?3 Y8 `6 R+ \* L3
' k4 A* O; i9 R3 K5 {+ R# \4
) b; d+ E' @6 k0 X4 z6 d- {8 y& O5: J& Y& C8 m. {0 N& J3 G( @
如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
5 F( T; L: A; \1 [9 B$ b* Q v! J4 }
% g, X) B- k, S5 r; m; Vmy_dict_1 = {'red': '红色', 'green': '绿色'}
3 R- @3 G9 `+ I! G5 gmy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}- W, y: ^% z6 {% \6 U0 ]( R
merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))
# f7 v; d3 m2 |& W* iprint(merged_dict)
8 M) K# P. D6 D1
* C% |4 a& D9 b: _! f- V0 F: y2
- T0 f, Q5 z1 R# D3
1 M; M; a3 T4 J% p* k9 p4
8 C% J( u S6 b% o, O/ R" K3 n⛳️ 列表去重
6 A7 s, n3 k/ A V2 n在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。. {- l9 D" z. ^& Y
5 @7 {7 \" u" y! h6 L$ L# V+ S+ R) d. Q
names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]% {0 q4 D0 ?' o3 b- q5 }3 H8 J
5 @0 N4 u( }$ ?' H& u& k0 m! T
un_list = list(set(names))
2 l6 j8 E3 `- v7 L6 s2 j! N5 y: B0 U/ B D/ p1 B( S
print(un_list)
* z' {& g7 s- M b! P% G4 Q1& g. P3 \( p# L+ _ v ~0 l: R
24 x. z0 m( r0 M/ ~
30 G1 O$ n2 x/ X" ^' T
4' _; d% M0 B0 {+ U* {! v" t
52 h9 H ^4 w! j! _" \
⛳️ 一行代码交换变量值9 W; O: B/ T* N
这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。
4 F9 P9 O6 _; Z$ @9 R `/ N. E% P; k0 @& B) U5 [
a = 16 w8 ~* U5 K" M- M W( l* z
b = 28 r: N, b: t' t. L" }1 J8 R
a, b = b, a
! d7 N$ G3 f9 f2 @; R F. I& h1 y, n
print(a, b)& {; [7 g: K! J+ x
1 P0 U' M% D# B3 Z
28 Q1 A" v: W; b7 x. J6 R3 V. v! r( v
3
4 W7 F8 \ ]. z8 k, v49 y" a2 {, Q, \! t9 f
5
) y# P1 w# m; `7 U在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:3 {2 h6 s) f" w8 V& I
" Y* R0 |2 ^! `' N. l: U) Q6 N
a, b, c, d = 1, 2, 3, 4
5 p, c& P5 w, D E$ w& h3 C(a, b), (c, d) = (b, a), (d, c); p5 C) z! M$ b5 v7 J0 {
/ B/ Z/ l- p* t) b7 g9 w
print(a, b, c, d)
/ w3 D; Q- U; s: x6 p1
! m6 k9 j0 z) j- L9 j6 }2+ U# u& v. C% O6 X% B
3
+ A4 M. m) a+ D/ B9 |4
2 K) u3 z( B; x4 N7 T⛳️ 利用 print 输出日志到文件# {# l3 M0 h2 k' ]% g h) V$ ^) x# x
编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。
' V2 K/ S# k% g: ?' w7 |
6 G0 s) t* X8 v+ j. `print("Hello, World!", file=open('ca.txt', 'w'))2 a5 C; f8 x1 j7 r; q/ m
1
- ? r1 z5 C5 Y9 f3 Z" h- m! n⛳️ 转置矩阵- j# K% t. A) y0 s- G- @ h
对矩阵进行转置,也可以使用一行代码实现。
; n* \/ V* D2 V( Q0 d! V3 n$ S
& j Q% M5 X2 Z1 U0 t& dold_list = [[1, 2], [3, 4]]! P; y" d$ C, c
! z; S: s* h+ z" E, J
print(list(zip(*old_list)))
5 _) I9 `0 _+ m& P17 \" e" K4 R2 X
2
: t5 L% P2 @; d1 v0 m2 V* \7 Z35 S2 y5 m6 }' Q5 k: h. j' ^ H
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。* G! T7 I% v: J* B& h9 n
% H |- P: b8 Z6 ?% y" w3 e
old_list = [[1, 2], [3, 4]]9 v1 e1 |! i# Y/ I+ c" u' @
print(list(list(x) for x in zip(*old_list)))
/ y; m7 V9 i3 z3 t% T. Q8 n1( N' P1 o8 i, M1 v% Y8 |
2
) @3 C; c( Q. I6 [$ f⛳️ 一行丧心病狂的代码0 S" l+ I+ Z( ]6 D/ G) n: n9 I) b
除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:
" u) B; O. ?+ _# ?1 |7 ]% l x% G: u
print(eval(input()))) T$ v# p3 o' E
1
6 a7 |1 P- x' t6 V+ p( S3 Y可以输入单行代码,然后直接输出结果!+ X3 o; J. p5 e$ K% Z
! |& h) |( F. u+ o4 @该代码最佳的实践是一行代码实现一个计算器。1 V* u% p3 q! }& C" c
————————————————' A' j6 Q6 U8 y" i) c
版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。3 ^3 ?2 R q6 K/ J9 K1 z
原文链接:https://blog.csdn.net/hihell/article/details/126094977
. C0 t" K2 g k: o# x* h9 A0 }- `4 S6 j$ ]( [8 M
# B& w3 _6 H! w F/ M
|
zan
|