- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563312 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174216
- 相册
- 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 代码
, W. v0 k7 V' \0 ~* }) f
8 L: `5 Q- G+ q( |) M文章目录
' c, c6 W6 |6 t+ ~' _$ Y" O⛳️ 1 行代码的由来
8 x4 d5 w9 Q* H$ [⛳️ 列表推导式
( D ]9 K( u% t% y9 }9 Y6 R' u! u⛳️ 合并字典9 N# A* @/ O* P, i
⛳️ 列表去重
9 n9 Q) L+ M' ^- x! i4 U: F' D⛳️ 一行代码交换变量值
4 ]' O8 @) }9 V" i6 y/ N⛳️ 利用 print 输出日志到文件* N- P7 p) J: ]
⛳️ 转置矩阵! B4 ]$ ?9 X+ W% p8 y( _1 @
⛳️ 一行丧心病狂的代码9 ^' d4 e$ J9 X ^% N) t: w
⛳️ 1 行代码的由来
: V! D0 N' i) b5 O都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。# B* k# a% z3 x/ |3 y, v
8 v8 f. g5 ]+ e% m, o7 Y所有的 1 行代码,全部依据标准的 Python 语言规范实现。) P" k+ N+ z" J3 P! V9 B
: ^/ G( {! T* K, |: x6 u" }+ \7 m" f
⛳️ 列表推导式: h$ v( |, e( E) \: { z
生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。1 `; O+ V. V4 t) ^# e! y; B' m
7 n& O( e; `9 a! G: [7 D, K! t( m
students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]( [8 b0 L6 g" N1 h5 P/ ]0 ?
new_students = [name for name in students if name.startswith("橡皮")]
) _$ `$ r% y; j1 c* j! N% nprint(new_students)
. r6 h; b- D* S1
/ _+ a$ c( E4 Y, w) E3 G2
! q* |% K, `& {; s. r2 r3
: h3 i: [, |9 u3 }8 u( Y! }* t上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。3 j) m; K( ~& r/ r9 w/ b4 y
9 c C; O7 ^! c: m. j5 w⛳️ 合并字典
9 V. q- }' f, t8 [1 n1 M在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码+ h: l2 z4 L/ y- t. y2 Q0 f6 D
6 s0 d: l) C0 [5 qmy_dict_1 = {'red': '红色', 'green': '绿色'}
! ~' {3 N8 X( ?* omy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}; {+ X$ d5 p$ e0 D
merged_dict = {**my_dict_1, **my_dict_2}
`& I( t, `; k7 Q+ R0 T ^" q+ _9 W* b4 u
print(merged_dict)' }/ x0 `3 `- \# W/ |' x* X* G n0 X
1
8 N# d9 \1 d* r7 p# f2- ?0 {, ^9 Q* N
3* f8 ?! ]% u: [
4# [( w _' Q& g! ?) ?
5! t& M9 `: R5 r* w
其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并
|! O9 |. c& ?8 a. m% \: Z
) e: ^9 E- }4 G1 K3 r- Vmy_dict_1 = {'red': '红色', 'green': '绿色'}
9 u1 V! U: b" {/ Vmy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}1 O% K& P- ~; f0 q8 g) N* _/ Q
merged_dict = dict(**my_dict_1, **my_dict_2)1 B' l, t4 B! c5 _6 J" j
- h) r& a8 k3 V$ Z1 C6 Z
print(merged_dict)
% \& i1 @. \; d: ]3 |5 _* N1
$ l7 P) d. H3 K2
6 v( j) K) q1 ?1 `& k# B8 ?) R8 {3
- Q1 I' c3 B3 x# ?# `5 L4
: n1 Q' `4 ]+ O' g5
) t( E, l9 n1 e% @' L6 c) t! s如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。3 `' `& H4 `1 E% e7 |5 @" N! e
3 s$ x, o4 s; s% }1 U
my_dict_1 = {'red': '红色', 'green': '绿色'}' h4 A- l2 s- o5 ]
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}* @1 X& G! c; G! |5 M
merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))
# D- a: b+ Y! r: Q% C8 D7 ~2 M3 Tprint(merged_dict): P4 G# H7 p7 C" _& W3 [
1
% C# u9 H, R3 F5 U8 n. X3 ?/ C! \2
5 h* h# J$ }4 D$ A3
8 F& c7 N, \' A$ t$ m* X: V: p4
) C6 _0 Y% T8 N⛳️ 列表去重
% i* E: s/ q8 A: h3 o4 j在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。5 k& z7 x7 Y# X0 m/ [
- I# q% Q$ ?( A1 ?8 |names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
k$ ~" p% R( y/ D$ D/ H' I
$ j/ }- k b% yun_list = list(set(names))3 g2 y2 R9 A- P; P. |' q3 G: V
! }: v: d) |) F6 D8 t* K
print(un_list)
4 m6 O! F, S- m, J1
: R9 r% W4 Y2 ~1 W u2$ {( p8 s% ^$ r: U/ X! @
3
% Y+ X9 f, s, t$ s" N8 |# U4
* L2 {' p! [0 N# O0 z5! ?7 e6 A, M$ C) G: Z+ @: W
⛳️ 一行代码交换变量值5 K1 a, o" C( v: f- W9 N z Z- e
这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。
* f. \" P5 T) R$ {$ A+ e6 u# Q2 Z" w$ M# v* p5 Q; L: y
a = 1
. @' q4 r# T' [2 I, u# E- Hb = 2
" V6 m6 s8 l8 N$ za, b = b, a
6 l$ }) w& @6 O9 G
5 @, |. ]$ \5 {" M: N- `4 {' t# G1 ^6 `print(a, b)
+ \7 |& w; |+ X/ @1- _6 u9 v. R# Q
2- f( m2 T+ G/ e6 A$ H# C$ _
3
8 ~( k# }! j' T2 v4
- [8 ^! D2 Y6 T S0 O) l56 B$ v. p9 g! v/ @' p$ M# w
在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:4 y% B2 h# C& B* X4 u0 O
6 y5 M' p' R2 r# ^# u1 n1 f9 `& w
a, b, c, d = 1, 2, 3, 4
9 `6 T2 W7 n1 d- C! `' g/ Z/ u(a, b), (c, d) = (b, a), (d, c)
/ O g1 [9 z0 J5 D5 x: C" P2 O
2 z4 Z( {) u( D6 P# lprint(a, b, c, d)
! Y# c% T! u$ @' x' B% v9 E' F1
5 _+ U6 ~5 Y, j2 b( r$ j( K* A2
T9 r" s7 t0 }" A$ ?. e+ I3& i, e3 ^. D+ o
4
8 o, o1 d% t2 ]. n( O1 H0 a2 \⛳️ 利用 print 输出日志到文件0 s, X; X1 s* }5 _: }2 `
编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。, q Y( ~$ B* Z
4 G% ]& X% [" ?; U6 l; O: t- h% Lprint("Hello, World!", file=open('ca.txt', 'w'))
}; r4 V5 F6 Y, {7 \1
" b7 w2 S1 l+ n( }⛳️ 转置矩阵
2 X0 X- O4 X/ g$ j8 A对矩阵进行转置,也可以使用一行代码实现。
2 w3 S. G" l, S
. H6 P1 X8 P& U: o$ q: i* Oold_list = [[1, 2], [3, 4]]
" t( K$ _7 W9 w8 r6 e8 G* |0 O
9 T9 b t6 j# N0 Z' Qprint(list(zip(*old_list)))
# ?9 q; x" F" |1
1 W' j6 l; p% t6 v8 E4 U2
" Y# j% a c+ S4 _# Z% E& q3
: C2 A! A5 E2 R& q2 z但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。
; w3 |3 y2 j1 \2 p, v# K" T
- ^4 X" J; ?7 Vold_list = [[1, 2], [3, 4]]4 l& s$ T5 I+ y& ?
print(list(list(x) for x in zip(*old_list)))3 v" l& y5 l) H; ~
1# d* c9 P7 Z" Z" g$ S2 u
20 H% ]1 W' b! A: K+ m% S
⛳️ 一行丧心病狂的代码) M4 K; f/ g( T7 {+ N
除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:
# I' R3 Q9 |( c' @! B3 p5 F4 u
) y2 H3 _7 `& M$ O- d/ x/ Tprint(eval(input()))
S) ?4 Z( \/ \! n8 V0 e1 j' k5 i u1$ A9 J5 w0 W" B7 U! \- J
可以输入单行代码,然后直接输出结果!
( V7 y- ^5 C; z2 `/ a
3 P5 Y: H: o2 q1 E该代码最佳的实践是一行代码实现一个计算器。: F- v W$ J# t/ F5 G- ]' q5 c
————————————————& C; y! G& `# Y: }) D
版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
5 I( R: D' d( t3 }# y$ V原文链接:https://blog.csdn.net/hihell/article/details/126094977* c/ Y3 N' u f1 D; p3 W/ p4 ]
0 R2 I8 Q) q: l q
7 @! N5 e" P) U0 v& T |
zan
|