在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 565607 点 威望 12 点 阅读权限 255 积分 174905 相册 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 代码
i/ D* @) v$ Q& }- C / o. K! z( ~$ L. f( X
文章目录
1 F- ^ d6 |5 ~) X0 z4 e ⛳️ 1 行代码的由来9 `- U0 Z7 r. e6 Y* Q" F. @9 k# @
⛳️ 列表推导式
t! g$ l5 y1 ]# X \ ⛳️ 合并字典% z1 c/ j0 G+ z, i% J
⛳️ 列表去重
% r* Q5 W& @$ i' o) c( \ ⛳️ 一行代码交换变量值
6 J) ] z- Z$ t ⛳️ 利用 print 输出日志到文件
. o& R+ C! }: e) F- F ⛳️ 转置矩阵! U! b% \% ^' _, X. c
⛳️ 一行丧心病狂的代码% r( ]. y O' t; N, }% v1 o
⛳️ 1 行代码的由来
' s. `& k! X+ C# ~, m 都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。
# P' K3 v; u M8 R
" F& n- q* Y8 [/ Z 所有的 1 行代码,全部依据标准的 Python 语言规范实现。. i/ ?/ J9 A/ a& a( h5 y
9 c2 Q+ p+ F X; b& }
⛳️ 列表推导式2 r- f9 B% x1 d! u% G* o; |
生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。
8 s3 X. c" a: [4 z& R5 \
6 l7 ~5 V% l. [* A" E( O students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
9 Q4 b6 g- }$ L0 b new_students = [name for name in students if name.startswith("橡皮")]' J% S; g# e( i5 N3 W1 k+ a
print(new_students)6 ?8 f" U( Z* l2 i! h
11 N0 u" V7 h0 J& w
2
7 {% O! V6 R T, I 3
$ L7 k+ i' t4 u) x 上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。
; W% F3 r8 W# z- G ; A0 I" h/ l9 ^
⛳️ 合并字典
% X0 H, ]! K' P2 C' A0 [ 在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码4 b3 M* j/ M6 Q. q
( x0 O- O* K3 V# ` my_dict_1 = {'red': '红色', 'green': '绿色'}
2 g* l0 t: m0 s9 L' i my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
, c- _' Y3 R, x' M3 \ merged_dict = {**my_dict_1, **my_dict_2}
7 r9 P, C- Z% K
+ h+ W$ v% h4 z( m print(merged_dict); s/ z# C; m/ o7 W4 k# i+ n
1
# x( s4 R7 A6 b 2
9 ~6 U$ P0 O5 Q: ^8 W: V 3' K0 q4 t/ f8 j/ q* l
4
/ h# j- {2 I' w7 [9 K 5: h n, P) x+ @/ ]
其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并
8 I; ^7 k5 `+ c# \: X 7 s' R' `/ j, {2 J
my_dict_1 = {'red': '红色', 'green': '绿色'}% p6 z6 T) y2 u3 R! `) ?
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}1 ?/ v- [* k9 e0 J% u J( k$ M: F
merged_dict = dict(**my_dict_1, **my_dict_2) c/ D, h* @" i3 E
' x" a# K# C$ ]" R; j print(merged_dict)
2 o; C( O7 _8 m: d6 G% M1 {- S 1
8 _" t; O8 H1 f! O3 O ]' k 2
% w3 K9 m2 i' G6 |! N1 }4 h 3
8 H+ S( I" T; K5 M! Y 4
1 j# s/ v/ s% o$ {+ Y, ? 5
; N" T( a h. E' Z: l 如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
& h6 N6 a4 J6 E* b5 S! z! o! M0 M ; {3 c2 {( ^" Q
my_dict_1 = {'red': '红色', 'green': '绿色'}
. J, N' P: v1 k my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
" O4 d' a( Y$ Y) o merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))- z h7 c) _0 d% T+ x% Q. b) I
print(merged_dict)& }. H9 Y' d+ f
1
' O; F n" t/ N7 Z6 _ 2
" f2 L2 U" {' O5 h# |3 n 3
9 ?! l$ u/ |# e" t! F) n* ^, x# N, h 48 T8 {* p2 N6 y# L& _( G+ u
⛳️ 列表去重
5 p2 e" ^/ d; Z# t$ F* ?% k7 R% N3 g 在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。
- [5 u L6 \( w- R* y; h
+ s; M0 S3 E) s names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
" L9 C; A9 a" O$ M
0 \4 X6 S, ?5 \ P un_list = list(set(names))
3 o% e! q6 I; B $ P% }# @, E3 u( k5 |! X, ~1 p
print(un_list)
* F; p5 B' t. O4 ^# i 18 J) F! G) ]' d0 S
2
- U% {! m7 o2 G1 t* z. ]) Y 39 w' [; \% ?; J* |% [
4" G5 b) c( c. x& |: q' |3 [
5$ p4 \% X6 o k; \ [7 ~9 }: ~
⛳️ 一行代码交换变量值# b5 \8 L9 [* D& c; M/ ^! x
这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。
8 E, P8 D1 v% Z+ F C& s. |' P" N# z3 Q2 r
a = 1
$ ^* O0 b' f+ P5 }& S( r$ O b = 2
3 x/ `" h Q5 q2 h$ s& @ a, b = b, a
. D1 o$ q1 J! v& ^* {& i
( P1 p; m0 n) J% T: h- X+ k print(a, b)
! D L4 y# _! b% e# j0 u 1
* b% P, E% b, p$ L6 E) V2 I 2
; U s* s5 _% I4 X) P( J& A1 {' ` 3* [) C7 B4 z$ P/ u# |1 H: X
43 K5 o( I9 x" _
5
; x; }* c4 r% W' }+ }3 U5 L$ V, X 在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:
* A* h7 k9 W0 ?+ d2 `" o1 U4 N
% ?# c! q4 B& V9 |" W a, b, c, d = 1, 2, 3, 4
7 k+ n* V) s5 A# [" N! I (a, b), (c, d) = (b, a), (d, c)9 ^! {- h1 K: m+ {% _ `
7 L( l) U6 M3 q3 s* i9 x print(a, b, c, d)
5 }: U8 u# w- i/ C 1
, ^ l: I) o" j! F 2
5 L# k! U& a' e7 b- U 3+ a! Z0 y2 j; b& E: u
4
1 |' d, i! U+ S- n# l+ ?3 p ⛳️ 利用 print 输出日志到文件0 t2 G4 V: @( B2 n0 @
编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。
5 `) A( ^, b# z) R, e4 c
+ M; F7 V6 D. s6 V5 x" u6 _ print("Hello, World!", file=open('ca.txt', 'w')), k0 w, K6 b& h4 b$ t
1" n* S. ^3 t( `1 k
⛳️ 转置矩阵
7 D/ L A! m% z7 a# C2 s& q n 对矩阵进行转置,也可以使用一行代码实现。
3 {$ e* I: ?% C! L* y % R+ O* f! x8 z
old_list = [[1, 2], [3, 4]]
( y# H; s" x; \; Q6 \/ J; f$ Y- y $ d$ q( t5 m! G* n
print(list(zip(*old_list)))
5 h/ Y, m4 e2 ~. b. g 1
4 F" ^* d/ V- }/ W* B! ~# S0 [ 2) d: `8 P$ _: ]# W( _8 C2 E
3' y) d" e7 `" g4 m' D* Z7 D
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。7 m3 E2 M! m. d2 U# W
- N; h* a% l4 K9 g' M. r* Q old_list = [[1, 2], [3, 4]]
0 V: O! \5 B$ H8 D9 w+ \ print(list(list(x) for x in zip(*old_list)))" g, y" R) o! k8 M' j1 `/ g* e
1
4 h- J4 }6 Q- S0 L& \0 F1 X$ X 2
9 e4 f% e, v+ |$ V) O7 m p ⛳️ 一行丧心病狂的代码
: p0 X" K% m* j% ? 除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:2 a6 ^' T+ Y: s
3 e7 G+ }/ l; E1 Z" M* m+ l print(eval(input())); q+ e4 J4 @# c6 k
12 X }5 W- V! [1 ]- S
可以输入单行代码,然后直接输出结果!1 f1 }8 w/ p0 m
1 m% Z% V: Y) h# C$ z 该代码最佳的实践是一行代码实现一个计算器。
( E. S' z+ h: Z ————————————————7 Z# T W; W. f
版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。9 u$ w9 S1 h3 N
原文链接:https://blog.csdn.net/hihell/article/details/126094977' l' r8 c7 O# }& |
3 I: y# @: b" ~" K, E1 ]5 a ( q- G0 g( v" O9 `$ ?) U
zan