- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563319 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174219
- 相册
- 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 代码
0 l' r8 ^7 J2 V6 Y3 }* U E& ?/ C
, Z* G8 b/ O4 j+ n' K1 `# J文章目录( z3 D0 Z. D1 B3 q
⛳️ 1 行代码的由来
2 l% R2 ?% S4 I5 r! D⛳️ 列表推导式
- w b* ~) s& a1 l# I/ @8 {+ I⛳️ 合并字典( m3 ]! |( ?9 R' ~9 h
⛳️ 列表去重+ ^# |' L9 f( f
⛳️ 一行代码交换变量值
0 g/ I' b3 T3 |- | X+ V⛳️ 利用 print 输出日志到文件
4 A$ R- ]! D" q2 k⛳️ 转置矩阵
4 Z- O1 B: y# q8 `+ G. f I. T⛳️ 一行丧心病狂的代码
( |( ]: d& G- h! w4 ]⛳️ 1 行代码的由来
8 q4 E, q! Z H, t1 x! _都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。8 o9 U! n& b+ E" r D" T% v
; T0 z: T# ]$ |所有的 1 行代码,全部依据标准的 Python 语言规范实现。
$ ` p+ H- T! J e0 s
( g7 n- V0 c8 Q7 o3 ?6 B0 U⛳️ 列表推导式
G) f7 J5 k( b& B& P/ P% H7 m0 _7 z生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。1 G4 E* X8 M% h; R
1 \) y0 S( `5 p) Bstudents = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]7 O5 ?0 k, d6 @* u' A* T. y
new_students = [name for name in students if name.startswith("橡皮")]
" ~. k9 c' U! \& @4 \print(new_students)
. T ?9 {, Q# U1+ J& C& C3 `9 ^# C; s9 {
2
8 b. E( L% s2 v1 r34 F% Y, @- k1 B' d
上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。
" q O! i7 p( A9 ^5 w3 H
! b0 l0 ?& v. m4 b( a" C⛳️ 合并字典+ _9 w) x% n* y J
在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码
( [9 H: ^9 o! v* _: F2 F8 C" G% d# T2 f+ G
my_dict_1 = {'red': '红色', 'green': '绿色'}; j) Y1 f+ N2 E- R' \! `7 u% \( E% `
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
3 ]9 D0 h( k- ~5 P" I, o- ?/ {merged_dict = {**my_dict_1, **my_dict_2} W# R* O" \$ K6 M
5 A" y$ c8 V Tprint(merged_dict)4 L, i# b3 v8 e' F' Z/ f h$ h
1) M: @: Y* J0 T0 i9 K6 V
27 ^8 o7 C8 {7 K! ?: K6 e
32 r$ X! Y! n' W/ ~; r# ?
4
* V8 M Z% ]2 b5 P3 a. Z0 A2 p5$ I L" G; Q* z# `- E( F2 c L4 c
其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并8 ?, Y9 G8 u/ }6 p. [
" I# ^5 h I8 ^! H" Bmy_dict_1 = {'red': '红色', 'green': '绿色'}/ O ]0 X4 A, ]/ h
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}, ] l* e2 x& `. [4 f8 U
merged_dict = dict(**my_dict_1, **my_dict_2) @( ~1 f+ {/ f) N
~) Z8 y" r+ W9 U
print(merged_dict)% O. A" d' z6 _
1
2 C5 Y/ \/ o* C2 v20 r) O: u' F; D5 T) U" G0 C
3; T) n" ?# G+ f
4( ^9 a1 I4 a9 k$ [% ~/ r
59 e8 O" ]% X( O+ K2 i8 P
如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。2 s" w0 b8 R. A8 E! `) k
' O: N* e# |8 c! gmy_dict_1 = {'red': '红色', 'green': '绿色'}1 C3 ^( Y$ v0 h6 T& _& A+ @, \
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}2 W$ }6 H ?: [+ j6 c$ e
merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))+ T% G+ F( q/ X- J) r
print(merged_dict). g7 S. ]& u6 f/ i% w& ]
1! G! g' M6 P; c# c* i
25 j& @. Y/ m$ r5 }- {
3
) f6 p4 ^2 `+ g1 h% \4! l6 C2 P, N: j$ I, N8 X+ R6 f
⛳️ 列表去重9 f# a1 i. P4 r) i5 U* h* I" F; K. `
在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。7 q4 ?* P; U1 t+ i" X" a
6 P5 b6 f) T1 k$ I: e8 w
names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]% y8 M" w" C) D0 p, B, x
/ J9 ]) P7 v# z, i; Y# T) ]$ ^un_list = list(set(names))) ]; c3 P0 ]8 X5 b3 w8 m
6 P6 I' @$ \) I V" H8 [6 V# {' _8 oprint(un_list); Q) p# F9 X) F9 y/ f. H \
1: s% d3 U5 I; L; Q
2
% h$ w; E, Q4 Y4 v% t5 T2 O3
6 V0 w, o. O" j0 B* s4
5 r7 T4 [* x1 H0 W+ ?+ }55 k: M0 d' s! Q
⛳️ 一行代码交换变量值
. T% X& g( j$ s2 v5 U- L$ f这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。
, Q0 z, R$ r. j5 X; D& s" f
1 W; f0 n. {" z1 ?a = 1
& ^) }% ]5 Q+ u4 E. Q: P5 cb = 22 N2 u; o5 E+ H& ?, i1 u. x! Y2 O
a, b = b, a
, J. u1 C- S* P- H
6 I" P2 B* U1 kprint(a, b)! b; {8 l; a% U+ z
1
) H1 |) x D+ h! p7 E4 Q; e( [2
! ]& |6 a/ U% ^$ V* d. k7 z3; ^: ?# |) A/ H+ K" m& X$ \8 A
42 d* q% G+ c' X `
5
" s1 j3 u' k& g, ]9 ]) w在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:7 @, n+ U8 _" V
# N- F4 G) b6 E1 I, ia, b, c, d = 1, 2, 3, 4
6 x. z* }& K! ~4 [3 L- j, P(a, b), (c, d) = (b, a), (d, c)# Y/ ]5 x) N4 J6 V/ @% c/ C
8 a- s j) {8 x7 L$ Cprint(a, b, c, d)9 G3 @. a1 T/ V& B+ R
1% g7 z! G+ A4 c/ n1 B" e' e% b- y
2
& u. z' c3 ~. S! _' b$ Z- ]; n3
* I. o7 C5 N& I% n1 S4* v" E7 l) j6 P8 S. w7 J" b5 x
⛳️ 利用 print 输出日志到文件
4 n6 F# M; E8 i3 {编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。
l* \- S% h4 P0 @/ `) X
5 J2 X( p1 G9 T* S/ H7 e3 {6 fprint("Hello, World!", file=open('ca.txt', 'w'))
6 G2 @! K. M7 m+ F( ^; t1 e13 P# M7 `' ^) n" z
⛳️ 转置矩阵
# b5 a6 X z" R% Z9 d4 _对矩阵进行转置,也可以使用一行代码实现。
; G3 r, \' M f
8 ` Q9 g* I! }- zold_list = [[1, 2], [3, 4]]
6 I' q- R- A) l" R: X. V2 q0 _! D' T- w) |, O6 R6 C
print(list(zip(*old_list))): U0 i+ u" W& P, j. z
1
7 c! F r/ @6 l4 g5 _6 u' a, S2
" Y9 o5 i( T G( c# v6 H31 z' z+ p( t# \' z. F5 Q. B
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。) U+ S+ F$ Y3 {. E/ t
: A/ I$ [2 w8 _* X7 T3 C
old_list = [[1, 2], [3, 4]], B# Y1 A2 o1 Q$ T
print(list(list(x) for x in zip(*old_list)))
( x7 l$ [) u1 w o4 t" S8 K0 |1
9 o' M, b; \, ]+ x1 I2$ X+ ~8 Q- H% U# H2 v
⛳️ 一行丧心病狂的代码& H% r7 e: [6 T) C9 r: y9 y$ E+ e6 X
除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:
! A) E8 g7 }7 }' K$ b3 t& B) c' F+ @. ^
print(eval(input()))) o6 V6 V3 F3 y( A2 e, ]% y2 M
1
' y6 o! ~4 J5 L0 G' M可以输入单行代码,然后直接输出结果!& Y2 E; I' O0 B, ]6 x( V$ F
* v7 R. ~( l. ^, L. K3 Y* r
该代码最佳的实践是一行代码实现一个计算器。( q( v% _+ x- ?
————————————————
+ E( l$ C6 n) K1 S4 a版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。& a! M6 Y7 j9 n0 w* M
原文链接:https://blog.csdn.net/hihell/article/details/126094977
" E- |( {. x; C6 o) g/ n
8 ]- ]) ?" O# d7 F' ?6 ]4 s
3 F" Y; M5 A7 Z# I6 b1 w. G3 Q/ e& P' w |
zan
|