- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563280 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174207
- 相册
- 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 代码
! _8 _6 Z/ Y4 o5 ]6 |. y( |. j2 h" `6 n4 D4 [
文章目录( Y! S; F* L. M# S; M( Z# ^( B: J
⛳️ 1 行代码的由来
8 j$ q5 ^( F4 u$ z. q8 G⛳️ 列表推导式
" z# d" ~( z9 O$ N1 x; Y5 s4 t( z( J⛳️ 合并字典
& d2 B" y* ~& k; c⛳️ 列表去重% I% ], A, ]- W
⛳️ 一行代码交换变量值 g; B( o _ w% K$ L R
⛳️ 利用 print 输出日志到文件6 E8 N6 b+ G) w5 R4 L, ^: s
⛳️ 转置矩阵
) j* } {5 U% o⛳️ 一行丧心病狂的代码: w( D: C( W+ o" n. P7 y D
⛳️ 1 行代码的由来7 W! u# T$ d5 D0 ^3 b
都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。6 L6 L- I# O+ i( M. a+ X
+ }0 Y5 H7 ]/ t p* C. G, c6 O: ]所有的 1 行代码,全部依据标准的 Python 语言规范实现。
, P1 g2 f, }( M9 j5 b( D
6 ^1 x/ n. O# @1 n/ L⛳️ 列表推导式1 g3 b; j- f6 `" f! Y& y/ o
生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。
4 i9 l0 L% ]" b* e2 }% D
3 l! p" p) b- Z D; M$ Qstudents = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
; o [% B! G% d: Jnew_students = [name for name in students if name.startswith("橡皮")]2 u. H: b# ~3 N4 l
print(new_students)
- x1 b6 ~; c1 z% w% f5 q2 N1/ h' u* ^: |. L% @: M: e3 s
26 W" o7 n* u* U/ C- X
35 C, A' I, N' s& C. F
上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。
# \5 C& i& T" O" V+ p
1 P0 P7 j' }4 J0 G5 C2 S⛳️ 合并字典
9 q9 O8 \1 C( L/ G6 N- z1 ]在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码/ E9 w0 Q I5 f! E6 \0 `: k
D8 a1 ~0 T& H' M( wmy_dict_1 = {'red': '红色', 'green': '绿色'}8 x0 {: p( D. }/ q' P& L" Q
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
: N* A& B/ q- j6 m; I1 c7 _7 Gmerged_dict = {**my_dict_1, **my_dict_2}8 v, A( |0 C. k/ T; ]- |# ]
3 l) K l- J4 T) n. j! b
print(merged_dict)5 V$ ?" ?4 y3 c3 \( B
1& S! c/ R2 x/ X% L4 k- O, X
2, i- p! y" A. X Z
3# |0 G; S) Z$ w3 b
4
p! y7 T+ h2 _- c5
$ V! X4 ?: u! I o B6 {4 G其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并
: \, |5 l f+ u; x. d9 M* n: @5 _$ N# P7 b! p
my_dict_1 = {'red': '红色', 'green': '绿色'}( L3 c( D4 m2 M) `4 E) s, E/ y) |" u
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}! w' S. u0 {. x1 O" U; F0 N( N
merged_dict = dict(**my_dict_1, **my_dict_2)& _ P# M" X2 P0 p; M! x! N
8 S& \9 U- j# B- d" P. Lprint(merged_dict)6 O1 F0 N$ M/ b' J
1' Y1 ^: p+ H ~- P9 c; K3 p% |! X
2
! p( @4 c& d6 s3 p5 I" h$ ]3
; Q8 g6 _% b' S0 H4
; R E Y! E( H* \) i+ U51 J% R' l7 j5 B0 K q
如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
" v: t2 U9 A; l0 n- H I
, E" M9 p! w5 ~4 O7 g9 n; o( |my_dict_1 = {'red': '红色', 'green': '绿色'}
/ v' A/ T0 I" \1 n# U { m3 [my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
5 c7 w% _! @2 Y4 k @merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))+ I. N7 Z: |" o2 ~ r. U/ X
print(merged_dict)% |- Z: k6 H7 Q% R( w( r
1, d6 z7 K2 H, i( a# h. b5 I/ J
2) o8 y% z3 E/ I
3
6 y- L/ c* M# H3 D4
' L+ C$ {( _- ` L9 @⛳️ 列表去重
( r/ d5 ?" {7 V; q在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。
6 M5 o% b. ]8 Y( j3 a/ c+ A" `* Q6 {! K$ g* _
names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
3 y7 T$ ]3 l/ l* z% w' k3 V- X" t2 v' U+ b
un_list = list(set(names)): L2 \( R R( @
M0 T. _* O! z0 Q i& I. u0 Jprint(un_list)6 H! E0 Q- ]2 c( [3 d
1; G8 F% B; R; t% L) Y6 d
2+ P4 P9 u3 ~7 |0 e0 m$ K! o( D
3
" E8 n, e5 c, _5 @& l" t4( u+ m% B7 M. h* F3 a
51 l& ?1 I4 w" N# W! Q
⛳️ 一行代码交换变量值' s- p$ P1 i8 l+ Q
这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。# m) O- _; r/ s5 P$ p
* _/ Q h" L9 Z/ ma = 1+ v! _, X7 j: M2 Q5 Q9 W
b = 2
) O `9 d v4 P% ]( W1 o: ?a, b = b, a
. Y. s+ w( U* \4 H6 G, ]3 V' i8 ]! b# g
print(a, b)0 W' ~- j% [% Q2 s
1
$ y- X2 o. ~' Q& C4 [: a0 X6 r2! A# p3 A5 s; a9 a9 \' l6 K1 g
31 L" l9 y/ Y o0 k1 g& c$ Z
4' Y9 u- i6 C) p' D+ t8 C, X' [
5
8 R# k T1 V6 B. ~) P在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:* _- {% o; |- V- W
& ^ y. f9 F( H4 [a, b, c, d = 1, 2, 3, 4
2 Q! ~+ K$ X2 y" U% X(a, b), (c, d) = (b, a), (d, c)
) C5 N+ g! E( I9 f8 _0 j& l( m4 Q* G# h- u+ z; U4 ^5 D; ~" C- J
print(a, b, c, d)9 w5 X0 m, }+ }
1
1 l0 z3 U) I* n1 `" O2+ x+ m, S3 u3 }3 |( D4 v
3
" g7 _; }; O0 T! K4
: Q2 m- m; D+ F# O⛳️ 利用 print 输出日志到文件
& `+ j3 u0 B' J5 F编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。, w7 s' M9 D2 M2 P7 ?7 F% z) ~
& T: F0 y; X- l+ ^. M F/ u. C# B/ tprint("Hello, World!", file=open('ca.txt', 'w'))
7 @$ G K+ H) ^. @11 y/ }" k' d4 a. x" g @
⛳️ 转置矩阵
. M1 u% Q$ w$ r0 G Z) Z3 K对矩阵进行转置,也可以使用一行代码实现。
( ^0 k. b& U7 K* L! D4 O; O8 ^% A& ?0 |2 Z9 k# d; Y3 q- J
old_list = [[1, 2], [3, 4]]
% W1 O) y/ \$ y( z( R- Q* F: @& G. c' y! G
print(list(zip(*old_list))); a1 z. q. A* X8 |! i% d' G
1
: R" ]% ^3 w. W/ |23 |! M6 ^+ k) f
3- x, K+ d% r& ^8 A4 T' z
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。
1 @2 V/ ]8 C& N3 q$ n- x$ R/ D3 G9 y6 w% u
old_list = [[1, 2], [3, 4]]
/ a# l2 M9 H N2 F2 S' lprint(list(list(x) for x in zip(*old_list)))
+ q1 m4 p/ O) `1, b5 b- L# b& [" P
2
5 @# Z) J5 Y ~. S⛳️ 一行丧心病狂的代码5 g! r; ^7 u3 Y
除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:+ `" c& q; V8 d U) t; a$ ~
8 t) m$ n1 z+ p- W
print(eval(input())) e! Q. T( g$ x
1
: P% g" s7 W3 @6 N可以输入单行代码,然后直接输出结果!
4 ~# ~* a1 s$ C: C8 Q8 V6 J# M& q% ^/ s( m% ~: T
该代码最佳的实践是一行代码实现一个计算器。; N5 j. X& } r" V
————————————————
- X# m& Q0 L- i+ B5 H4 _7 G版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ ~# z6 A' g8 m* E2 \% c' y5 k( F
原文链接:https://blog.csdn.net/hihell/article/details/1260949772 E3 L. h/ H# N; l) w% T# t* t) |
3 ^9 I# Y' h- f0 E9 z& f) k6 p. E- K& S0 l9 N
|
zan
|