- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565641 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174915
- 相册
- 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 代码
1 J8 b/ c+ d- X6 F
7 g/ S/ N2 Q4 s" R文章目录
( b: G# U; y& h a7 l- I⛳️ 1 行代码的由来
) E- {0 i0 Q( i7 o⛳️ 列表推导式5 j* _5 g8 M8 k! }" T8 a4 J
⛳️ 合并字典! u. F' o5 t) d8 R
⛳️ 列表去重
/ P1 j" W) z7 V/ k⛳️ 一行代码交换变量值; p! _9 `* \8 a% M4 H2 w2 u
⛳️ 利用 print 输出日志到文件
: y4 `- q" r6 Q/ D* l3 m⛳️ 转置矩阵- }0 a [9 h, J7 o0 W8 G) X: L- c& m
⛳️ 一行丧心病狂的代码
* m* q! A* |* N# S1 B4 E: v⛳️ 1 行代码的由来 w6 H$ `8 V8 D3 L: z; ?, ~# }* E) t- G
都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。7 `: M1 F/ q( v4 {1 m4 B3 V
: U) d8 s6 l \- S3 a9 q
所有的 1 行代码,全部依据标准的 Python 语言规范实现。5 q) A7 I+ I5 o) \1 ^' Z
8 t% Q' q X% D3 D1 H% ]
⛳️ 列表推导式: Q& {% r+ Y( ^ e4 B
生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。% x# \9 q3 n7 r( J
* Q4 Q. P8 F1 }+ s, Y, d3 {students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]) D5 q5 V0 M2 f t8 Z& D% w
new_students = [name for name in students if name.startswith("橡皮")]* C& {+ h+ w0 b
print(new_students)6 }( K! e9 E& ]" M1 V1 F
16 V5 ]! i/ W9 O1 M; q
21 U: Y S! m V5 u# W
34 O7 F& J4 B" b9 D
上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。
$ A2 R, @& X q1 d0 W" j2 k' l4 R2 Q/ P$ I3 W' {0 K
⛳️ 合并字典
4 J5 F: \9 @* u# F: z! u- u# }# c; f在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码
1 [6 i. \+ z/ C* B: d& o
3 ~+ t' l0 d8 Y" Q2 @my_dict_1 = {'red': '红色', 'green': '绿色'}) w" c3 I7 x" m! y- r
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
! r0 |0 h% A9 W x% L% p) e) |merged_dict = {**my_dict_1, **my_dict_2}7 E& E/ U7 B. ?
; R! f/ h% d: E4 `) ]+ Sprint(merged_dict)# S/ p7 W- F) k8 J% g
1
; j# ^0 G9 H8 y' a2 O$ l25 \: F" L, j5 }1 e7 |& [* k
3- G% Y( q$ k, p; @- V
4
6 h# u. M! V9 l- G5
; a+ t. R0 f. l4 E6 l其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并8 w4 W- _ U o5 G8 T! k# K
$ V/ @! |5 O3 `6 G' r# kmy_dict_1 = {'red': '红色', 'green': '绿色'}! S* q' q( D& z0 O
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}) {8 o& q8 z3 c) y8 H/ d
merged_dict = dict(**my_dict_1, **my_dict_2)& E- i0 X* p" K( k
2 u7 M1 `: H3 f, i" }4 i: n# S! d3 c
print(merged_dict)7 d3 t) K$ Z) \' X: ]- b
1+ p! j" Z2 w% a) x
2
+ n7 _1 u* y# E5 C! O3
- q3 g- W2 R( v& [* m# ^4
4 c1 p( V; `- |% R ]4 o' t Y1 v. [5% P% ?8 Z- e9 U$ X* o3 O. A
如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。" I% X. r/ k# ~
3 ]5 b* c ~! @7 T
my_dict_1 = {'red': '红色', 'green': '绿色'}8 O) q% J8 A2 t
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}1 H1 |; q% o) t, M( @
merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))
2 I1 Q+ g7 [8 Hprint(merged_dict)
: Y+ w! O4 x6 _' A5 J0 X2 [1
0 T1 `6 Q! P; d! }2
: S, r+ W; l% o31 d" i) ^6 k( I2 k
4
/ `% z2 [) _" m1 l- g⛳️ 列表去重
0 K. @9 \! S9 r; F在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。" K7 P7 U9 F( {
1 h' C( J$ o0 L7 q. ]3 t8 a1 u
names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]
: f* n; n$ y" {! m3 A! {" R1 Q$ ?1 v6 J" H' h- Y" E, k
un_list = list(set(names))9 ^/ C5 d4 X* C8 ]
b- `' X' y& |, s9 J) kprint(un_list)
0 h+ F/ ^/ m2 L% k1
. h2 z! l4 a, t' u, D: u2
5 B. |' J0 F* M. L3
( F- [ H' C8 {1 u4
7 T. {# T( |/ Y5
" r' f9 \5 E& f( N: V! X⛳️ 一行代码交换变量值
6 a% r9 u% `: D' K: u这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。2 h7 f/ y: z3 W. U0 V
1 r. b; Q$ c- F) t$ i* | La = 1+ E: X7 X" w- ~* [
b = 2; R5 A5 G( I2 S* m
a, b = b, a, L& U! i: g, ?5 F: l2 z, z0 L, B' ^5 ?
6 b0 j, h) Y2 V, J/ ]
print(a, b)
7 v1 H. ?3 Y! W) y% l1
- L4 g" q2 p3 p. O" k3 \, e, s2 L$ e- b5 N( U, ~6 r+ r" I% T$ e+ F0 G
3( l9 w8 H, _! ^) S& u
4
( q7 z. v% n8 _& a X* Z1 N) w" q51 W8 P& E a2 f: x; e
在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:" q: K; q) x7 g: f7 z
1 K, b+ [" x2 h0 r2 c7 ra, b, c, d = 1, 2, 3, 41 |/ k: a. H/ g% X, h; S! I0 D* n. m
(a, b), (c, d) = (b, a), (d, c)$ w5 L+ J) P' c$ z
. Z7 s$ M' g6 w
print(a, b, c, d)' s2 C0 w' C8 ]0 P' [+ T( @- n
1
) L! O0 H9 N& M1 P- R1 K1 p2* [2 e2 S0 d( g* g% Y- ^7 y
3* A2 A% C+ p- Q3 v# b% ~ Y
4
$ J/ Q4 L6 T+ ~9 O- `" L Z⛳️ 利用 print 输出日志到文件0 @3 D' z+ y3 x5 g
编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。
' R& p4 B" H% v8 `6 @9 \
# F, V2 N% ~: c- g4 oprint("Hello, World!", file=open('ca.txt', 'w'))0 g, y2 Y* g9 M% w" F$ V* V
1+ y' L! p0 n/ t. i2 K
⛳️ 转置矩阵
; H/ I1 h" @$ s) J! |7 w对矩阵进行转置,也可以使用一行代码实现。
$ f6 H6 l0 J, b% n" m# W% m: F. b7 M$ a6 ? W
old_list = [[1, 2], [3, 4]]- A* p% s3 _* c. o2 I5 @
+ }" i0 p; }8 _5 s% H w! Z% I
print(list(zip(*old_list)))0 g+ K2 c4 Y# U) C7 I9 i3 m
1
' o+ V& Y8 q! v5 k2
R9 | ?! i' ^+ B# p3- [; S( t2 o- B7 r8 A8 Q
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。/ I! j, _2 T! ~& }' D# W; Q- P
; X9 j" j+ [4 I' Xold_list = [[1, 2], [3, 4]]
3 S( w) J# A2 _! D& G7 [* k* J+ ~print(list(list(x) for x in zip(*old_list))). {* v, L1 \) \8 C
1
- Y* I, B7 Q( b1 ~" Q2# }- x% Z# S0 g! B$ e- D
⛳️ 一行丧心病狂的代码3 b3 T: a& U+ P# i4 i
除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:6 \: X. @( g& G+ ^7 c
0 z8 A. ]) Q2 {# x8 {print(eval(input()))/ |8 _+ E6 ? R. k* B* A
12 ^, R( ]3 ]2 o! {# ^9 n
可以输入单行代码,然后直接输出结果!( D3 k n' h- R9 B
$ v6 c. N- P; q. o" }) L( w. [: j该代码最佳的实践是一行代码实现一个计算器。
# _/ r( }& n; F& W————————————————/ \9 [: t* T; E" U- z/ h, m( x
版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
( `, x: H$ }' Z! V9 f原文链接:https://blog.csdn.net/hihell/article/details/1260949773 T; r- z% Y0 j; X# d7 t( t# S
+ y) S% D" g3 n% G- h; r( E2 Z+ ] Z7 J! \; `% a: x3 y
|
zan
|