- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563345 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174226
- 相册
- 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 代码* x- ^8 d5 Q5 Z9 ]
! |3 k. L# n; n! M文章目录
* B0 q0 e6 `* m; Y( Z) r: Y⛳️ 1 行代码的由来$ M' F, @4 \7 B& u
⛳️ 列表推导式
, R& U0 y$ X# h" w7 m& M⛳️ 合并字典
K2 M* w) I: `" K6 e⛳️ 列表去重
( f% O+ E% g ?+ \; ^⛳️ 一行代码交换变量值! h6 [1 ^% r* e& o* Z
⛳️ 利用 print 输出日志到文件
. k+ S5 S- D: Q# t4 t⛳️ 转置矩阵9 B7 U0 U4 S' M. W5 s; B
⛳️ 一行丧心病狂的代码% F6 x4 _. {0 u1 C* Q5 v$ u1 b
⛳️ 1 行代码的由来
/ V( P$ y9 F; z6 |+ _0 t都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题。
& d$ w {, E' S$ G% W+ M5 b) { }5 u; a0 B4 e' v6 U* j3 v
所有的 1 行代码,全部依据标准的 Python 语言规范实现。6 C6 ~1 y' p; J( R" E/ ]' y6 R) o
6 p& I Y7 t, z9 ?. V. j⛳️ 列表推导式
2 F0 [$ ~/ s: k2 U& U+ r生成器语法绝对是 Python 带给我们的优质语法糖,它可以基于现有的列表创建一个新的列表,而且语法格式简单。% E% K! F* t. A" g
. E# B) A2 q% B- S# g: P
students = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]+ O% J2 G+ z* m. X' Z M0 @
new_students = [name for name in students if name.startswith("橡皮")]
: l0 D/ ]4 m+ s. y, F$ Yprint(new_students)7 W2 h: P* l" h3 y4 U/ j
1
- [9 T3 P/ ~, v2
9 Z' d" P+ ~' U1 P$ F3
& B2 m) l( d' _: l上述代码的第二行,在原有列表中过滤出全新的列表,而且语法简单,基于该语法结构,还有字典推导式,集合推导式相关知识点,都可以使用 1 行代码完成目标需求,可以学习来。7 B% [$ D1 Y5 M: Q, y: v4 G7 D% N
/ R8 f0 R5 ^5 L( A1 ?⛳️ 合并字典
& f+ u# u3 X- K, |5 B* I4 W在 Python 实战中,有时需要将两个字典进行合并,最常用的是使用 update() 方法,或者 merge() 函数,当然也有工程师使用刚刚提及的字典推导式实现,那有没有更加简洁的写法呢?可以看下述代码
# O* N6 {4 J- T- ~1 F+ J% j' |
# M" S+ B# y$ J Y8 I& emy_dict_1 = {'red': '红色', 'green': '绿色'}, B* H( \* a X1 h- l
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}2 u& m) o1 j' ?) M0 F9 E( ~
merged_dict = {**my_dict_1, **my_dict_2}
, B) j0 p/ }+ v" @# O
2 d. [2 b1 O, I- C6 L- ?/ c3 A$ cprint(merged_dict)3 ]) b4 d$ M, X* c
1
# {7 O* j G9 e) P9 q- Z1 z2
8 m# H q+ _" j- T3
9 p- R! ~( q# X; i3 w. D+ Q0 D' ]4% n( W5 V( f3 p" D4 b
5
4 ?; ]2 X+ A$ ]3 F0 r其中 ** 符号是解包运算符,即将字典中的内容拆解,解包之后就可以参照上述代码使用 {} 合并字典,当然也可以直接使用 dict() 函数进行合并
4 b& i, v# [' R2 v- N8 s3 ~) y( K0 w$ V X# }5 Q/ Z
my_dict_1 = {'red': '红色', 'green': '绿色'}
4 f4 G( c5 f: n6 w5 e8 q, ~8 Jmy_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}: k& J7 l% V& J
merged_dict = dict(**my_dict_1, **my_dict_2)
9 n3 p9 n4 C( D: `. l( F) f
5 v9 i! f' T: h) T9 h7 A Bprint(merged_dict)
% c7 a* {) u/ [8 U0 [3 n- S1! ]! c. C3 H5 Z; M; G; w
2+ b: B: d2 \8 q- n: i) ]0 a
3" s0 o; W) i1 q; v3 n0 T. ~- j/ s
4( y) T$ |7 m7 y8 L# K
5
% G+ E3 K ?/ o如果你一时没有转换过来,那可以使用下述代码进行转换,即使用元素拼接技巧,先将字典转换为 list,然后连接。
$ ^8 y! A7 }' u. }; b& M
% p6 }0 `! G: zmy_dict_1 = {'red': '红色', 'green': '绿色'}8 l1 r5 [( p: U
my_dict_2 = {'blue': '蓝色', 'yellow': '黄色'}
7 B0 Z$ }; {! A% V! \merged_dict = dict(list(my_dict_1.items()) + list(my_dict_2.items()))8 \3 _5 b: i }
print(merged_dict)
! y( }+ M- m3 T. m; o1
( c6 l3 p, n$ ]9 I3 O! O8 N) {4 |8 R2% x8 }; e9 \; i0 j- q. y0 j6 p
3
% @0 G' R6 u3 N- f* V' N4( D5 m1 b2 L& y- D) Q# u( }+ R* Y" V9 [
⛳️ 列表去重
( T2 v& ]$ _6 e k' O在实战中,也会碰到列表去重的情况,如果列表数据量不大,可以直接使用 set() 函数去重,即利用集合不允许包含重复值这一特性。1 r' o$ a- I- \0 k" u: R4 E, f
1 N* s. F" M/ i( ^8 p
names = ["橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦","橡皮擦","橡皮擦大","大橡皮擦","梦想橡皮擦"]0 b1 t5 ]8 s( g6 e" d, |3 ?% Z5 _8 G
+ y% p& |/ D6 ~, p/ Q( Zun_list = list(set(names))
% u; O2 y3 ~% ]* t
3 j+ g6 i0 W: t, T* W4 V* Pprint(un_list)
3 f ~3 [) y* ]3 s6 S9 j10 r. q: n! G# @. K8 Z
2% M2 L) n7 o8 ^/ u$ Y% B1 P, D
3) K" v& f3 p! k
44 {5 X. i* j" \9 {
5
& v6 r; m3 _* [! B7 p# [⛳️ 一行代码交换变量值4 H$ F j; g% e% Y+ U- b7 i9 J
这也是 Python 中的语法糖了,在做排序类算法时经常碰到,使用一行代码进行变量值的交换。
# @# E/ m4 U% ^5 O
. ]) d3 X2 H$ |: |& R3 T6 oa = 11 h) M3 H# s- ^
b = 2
2 V( ^ g, a" g9 c/ [0 va, b = b, a1 }3 ~! C% T! H' W+ X' v
) Z7 }8 R+ d1 A
print(a, b)3 C8 q+ n- K6 b) X* t. S: w
17 k) A# z$ v' z+ d4 z/ a& x
2
1 S: [1 W6 S- p0 ]+ V4 e& x, V36 Q V7 R. }. X4 m0 }
4
8 F# b7 t0 Z$ c Q& b50 X' Y* _8 O9 S. g, u+ E
在此基础上,可以扩展到更多变量,此时还会衍生出另一个一行代码知识点,即一行代码为多个变量赋值,示例代码如下所示:2 b2 o% D/ Q7 T+ g5 p1 }
4 M1 s& X, F: X- `
a, b, c, d = 1, 2, 3, 4% H5 l' P+ A, f2 B/ z" o+ p; S: l7 [' q
(a, b), (c, d) = (b, a), (d, c)2 F% F- W v) X+ I+ i$ ?
& ^" I' g5 q1 v8 C1 s
print(a, b, c, d)3 R8 [! r/ M) W5 r6 A& N& Q8 X
1
9 s0 `3 ~3 l+ \) y2
$ h! m) M) l; n: |* C: d( `3; s4 E/ H; n1 M3 T2 v; [
46 d) F% d9 W1 x3 K$ W. a
⛳️ 利用 print 输出日志到文件
, k9 W; _% K+ G7 N& ^% O4 i! [编写代码经常要测试输出结果,因此会大量的使用到 print 函数,而这些结果默认会输出到控制台,关闭程序运行之后,结果就消失了,实践中,可以利用一下 print 函数的第二个参数,实现将输出写入到文件中。- L6 y8 h/ h$ D; t; z4 M
1 }9 T+ h& P* r- g3 U {1 z
print("Hello, World!", file=open('ca.txt', 'w'))
( ^0 g1 K' u3 z1
8 e6 X5 d- |0 @- }⛳️ 转置矩阵
! ?7 I6 |+ C- m1 U! X! O& m对矩阵进行转置,也可以使用一行代码实现。
, j$ @0 M) m6 f3 C7 m: a) b+ U
; P- H7 U" A: S1 _8 H5 ?old_list = [[1, 2], [3, 4]]
5 f8 R; q- |+ d1 x+ P4 \' d- W5 f
: Q3 e3 N; x: I3 l. J: e+ qprint(list(zip(*old_list)))
2 k0 J( |4 w4 r* D) O+ g6 [1. E! e0 B% T, ^: Z4 C" @4 D( Y J
2/ {7 T9 Z- ]9 o( ]) s$ m& V
3) G7 Q6 u- c' Q8 M2 f) N6 }
但上述代码会将列表转换成元组,如果不希望该情况出现,可以使用下述代码,依旧是一行。; a5 n& S, i: A k* W8 |! e8 u
* x4 A) f @! F" i, `/ `old_list = [[1, 2], [3, 4]]
# T( q$ i) w! a9 [print(list(list(x) for x in zip(*old_list)))$ y# Z( G- _" C9 |
1, E7 s( [. H1 J5 L [7 P# {
2% v5 @% ?* v! v4 p
⛳️ 一行丧心病狂的代码) V" X& d( U' i
除了正常的操作外,在 Python 中还能实现一些神奇的操作,例如下述代码:
, E. e5 v7 F3 u( ^8 w- s9 q/ S
4 l1 O6 ^: |9 I7 G! Oprint(eval(input()))3 V9 e* b, H: f
1
1 o0 n6 X# r" s; [1 b可以输入单行代码,然后直接输出结果!: z. M4 R3 H$ I% w' i3 x
6 w3 I4 u- M% z, Z% t+ T该代码最佳的实践是一行代码实现一个计算器。
. Y8 p/ ?. D3 P8 w————————————————8 H9 I- N1 ~! D2 O6 o o
版权声明:本文为CSDN博主「梦想橡皮擦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; H4 x, A2 h k D7 x1 {
原文链接:https://blog.csdn.net/hihell/article/details/126094977 l+ F) U6 O9 G$ t2 c! e
$ t: H# k7 l; ^0 p/ V1 q1 t9 _0 |' z, k
|
zan
|