数学建模社区-数学中国

标题: 一行Python代码到底有多强大? [打印本页]

作者: 杨利霞    时间: 2021-7-8 15:11
标题: 一行Python代码到底有多强大?

1 V9 s* F+ [2 K( U1 D3 D! r  W  |# H
一行Python代码到底有多强大?: \9 T9 A+ I7 z' b, V% b
Python是一门非常简洁而优美的编程语言,在其他编程语言中需要繁琐的代码逻辑才能完成的事情,往往在Python中一行就可以解决。
" |* `6 [+ R- j! C/ y) `( J; N
  P& D8 y# x+ @0 D% q) v

3 ~4 O. _: a7 E7 R* E5 ]这样,它不仅可以减少开发工作量,还能够大大提升可读性,避免在开发复杂逻辑过程中造成的失误。3 f( G- L6 v! ?1 n

+ W# J3 L0 O. d- A. C2 f

' y6 G  A8 {4 x本文,就来给大家介绍10个一行代码到底有多强大!+ o0 W5 }1 ]# i1 E

$ x, r8 b1 O) Z2 `7 `' W7 @# h

+ L9 K  l! p5 |( E" g4 i( s1. 交换变量
3 D6 Q: W0 x+ j* c如果大学学过C/C++编程课的同学,对于交换变量一定不会陌生,这是最基础,也是非常常用的。+ i3 c. E* I; y+ p3 i( ^% F8 o# M7 V6 j
2 {, M: P, I/ U( @$ O( L( G
! _2 _1 F# ]1 a& n+ k5 I
如果用C/C++实现交换变量,需要这样的操作:! L- ~0 ?0 `( v6 k2 q1 W7 K
/ q1 B* g/ c0 B. ^- _- C# `

! d, W) J/ _/ a% Iint a, b, c;+ N9 a& r: F+ E7 y
c = a;- F* X' u/ c0 r( u
a = b;
9 I5 _' r. f: v; v! m& ~b = c;
- S  w3 ~& H0 A, d6 A而在Python中,一行代码就可以完成变量的交换。
2 p! d# ^8 v! o9 V6 p, |
$ D. i$ c2 e/ c$ ^+ H/ |/ O4 G
: G- }. g) n, e5 D7 @' E/ j; D/ H& d
# a = 1; b = 2
% g( U) @8 T: r  O& y" D% [4 ~a, b = b, a
1 N! s( P7 E# s# X% m5 t# print(a,b) >> 2 1. }- Q0 Z* |6 a9 w0 H( d& H9 P
这样,我们就不需要去额外定义一个临时变量,不仅简单,而且非常直观。" t# u: f+ M" @

1 r% [4 j) ]' M' |6 u% J4 S

5 a8 w. z9 r! \) G, K2. 多变量分配# U6 D6 ?6 X& t2 K( D  O7 a; m) _
如果你在分配变量时同时包含多种类型的变量,这在很多编程语言中是无法实现的,但是在Python中一行代码就可以实现:
0 V$ Q5 r; O% u+ c- J7 b6 ^5 D' I8 q9 m  B' a* _' W. T

; d* H$ a" S# F5 S. b. n- Sa, b, *c = [1,2,3,4,5]
, h3 e; x0 t+ r& M8 a5 b# print(a,b,c) >> 1 2 [3, 4, 5]
+ B1 Z$ b5 y( s  r- ]在Python中,可以通过符号*把列表元素分配给指定的变量,这也叫unpacking。
5 C2 x, x; B3 r3 G2 D# e# \6 q# Q, K% T" G/ X/ {1 o! F2 t

) a. q, ~3 e7 F+ o8 u3. 每隔一个元素求和
$ Y5 y* l0 p& D9 E+ E% {如果有这么一个列表[1,2,3,4,5,6],你想每隔一个元素进行求和[2, 4, 6],可以这样使用:
( i+ ~, @7 c( i6 U
/ @7 _6 N4 P  G: j4 }2 o
3 G% ^" q& R0 ?  C8 l
# a = [1,2,3,4,5,6]* d! ~- w# g2 T* H3 S
s = sum(a[1::2])& L) T8 @9 r/ P8 ]3 U" t$ s
# print(s) >> 12
0 x) H3 ~7 X# X, J/ M这里,不需要利用复杂的逻辑,只需要合理利用Python切片就可以实现,[1::]标识,从第2个元素直到列表结束。
9 w! Q1 t3 v8 t' `
  D* S: q, P+ a% z7 w# n

0 ^3 l5 M- r& N- q6 K9 e0 r4. 删除多个元素$ I; A/ M& m. n6 g
# a = [1,2,3,4,5]
5 z; n# ]' _& t9 o. A8 bdel a[::2]  u- @6 z) o& d3 D
# print(a) >> [2, 4]
; D# N6 W& q8 x' Z  h; ?; S强大的切片语法也可以用于一次删除多个列表元素。+ u/ \# B. u; o" {& d* Z5 \
3 G. m) d+ }( `5 R7 Y4 \
$ I) J& N5 J: r* z' z! a5 _! O1 x
5. 将文件行读入到数组
) y# i( M/ y; W9 G" R如果条件或循环语句比较简单的话,可以利用列表达式去简化代码:1 q1 R  u7 O9 N8 h% l
. r2 U! s1 C- p

' o! i- H% N& ]. Q+ Z1 pc = [line.strip() for line in open('file.txt')]+ H# t" ]% ]) f* v5 N5 F2 v$ m9 o
6. 将字符串写入文件: S) F/ M" Q- M1 ?- B; g( A  W5 @
对比于其他编程语言常用的open、close去读写文件,Python提供的with方法更加简单,而且不用特意去关闭文件:7 f/ |$ S9 g+ C1 c: W$ ^7 K: V- Z
) w7 v1 B/ C8 S' V
) u- z) T0 R/ z6 c" h* |. i+ f
with open('file.txt', 'a') as f: f.write('hello world')4 S( b9 w/ C7 ]/ X
7. 创建清单
4 ^" c3 Z  v1 k, g' N# i+ Z可以使用内联for循环从其他列表中动态创建列表。您可以直接修改值,例如,下面示例中的字符串连接:
4 F$ g3 E; i/ _3 k5 b: g1 y
! [' R/ F/ o+ i/ `( i# k; P# U! [
: }  Z1 V" V+ O
l = [('Hi ' + x) for x in ['Alice', 'Bob', 'Pete']]' q+ l& r$ r! X, ]3 ~' q2 l
# print(l) >> ['Hi Alice', 'Hi Bob', 'Hi Pete']
3 {$ W8 s0 G6 L" Z5 E8. 列表映射  C7 P+ Z' l  g. K( O# Q
可以使用Python的 map()函数将每个列表元素转换为另一种类型:
0 h- X4 o/ \1 ]  X
+ D( m9 @! K- m

9 x) b4 ^, Y3 e: A+ R( ^l = list(map(int, ['1', '2', '3'])); A4 ]% N2 k8 r
# print(l) >> [1, 2, 3]2 i% t* _# y/ g/ _+ [
9. 集合创建
& n% }8 M' }' ]! K  l4 S列表达式除了使用简单的for循环语句,还可以结合条件语句一起使用:6 V( r' z% Z% x) e

; L5 d# I! u3 o9 Y

/ _4 w- j: l; b  u1 @$ Isquares = { x**2for x in range(6) if x < 4 }
, G( M- ]! E3 f9 A2 l7 c5 K# print(squares) >> {0, 1, 4, 9}
0 \* Z) u& q1 ^% w10. 回文检查5 W/ h& O2 l$ M
回文检查是笔试题经常会出现的一类问题,简单来说,它就是向前和向后都读取相同的字符,这也难倒了不少应届毕业生,利用Python,一行代码就可以完成:
& d( E: e# D/ a3 x5 q8 Q" Q$ H1 U* R" E# y
+ I9 b# s+ K* ?. D
# phrase = 'deleveled'4 F0 B  f" c1 E8 G3 b$ K! W$ B
isPalindrome = phrase == phrase[::-1], k  c( W* s7 t0 R9 N1 c
# print(isPalindrome) >> true
  Q- t5 b& d* I% t9 l5 c结语
0 I$ `( W5 Q" |8 b3 M进阶Python过程中,会涉及的编程技巧远不止于此,要想深入并精通Python,需要我们持续学习,并且不断的总结。
, ~3 R2 a' G* p0 E
- d- Z% e" m2 [% V3 V8 i

+ _8 J) J: v. e% f! d6 A: w提升编码技能最简单有效的方法可以总结两点:“多看别人代码,多让别人看自己的代码”。
" P6 f/ x; A1 h, u3 `( f7 v6 q) d& b% F4 b; R: u) @) h3 l
9 Y% F; f1 Y5 `! r$ u5 {
不同人的思路,实现方法不尽相同,看别人代码过程中,可以看到与众不同的编码方式,可以从中汲取一些优点。
6 h, v: J8 v9 {. p3 \" M
: w2 y' b) |$ n2 p% R8 D
* \% x2 }# f. y; I
多让别人review自己的代码,能够不断的鞭策、激励自己改掉编码过程中的不好习惯,错误用法。
7 C; m  T5 K4 w+ L# j" \$ T0 X# O8 B( I% @$ u0 ^7 n* b

8 U! }" o1 }: W/ {干货推荐
& r6 X) h8 g  d为了方便大家,我花费了半个月的时间把这几年来收集的各种技术干货整理到一起,其中内容包括但不限于Python、机器学习、深度学习、计算机视觉、推荐系统、Linux、工程化、Java,内容多达5T+,我把各个资源下载链接整理到一个文档内,目录如下:
$ y0 u4 W! W. b" |2 ^- j% r3 a' N6 d3 h  k0 B: `
* Q# T$ p# W$ g+ ]6 Y' ?4 F

/ `  ]) t3 y* X0 d9 G

. x: W1 E- ?& u! t
" Y  `) l3 v* A6 z# {. E

8 K" L0 L) L) A3 c. W% W所有干货送给大家,希望能够点赞支持一下!& {& j; C# ]: a1 G0 u
3 X+ C! d, }' w) }: {( h) R

, V+ \, l7 _/ K+ U6 ?http://pan.baidu.com/s/1eks7CUyjbWQ3A7O9cmYljA (提取码:0000)3 K8 a1 E8 l$ R# V
————————————————! b' _7 X' [/ F4 a" |, l
版权声明:本文为CSDN博主「七步编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。( L% q" n3 [) b6 d2 V
原文链接:https://blog.csdn.net/jakpopc/article/details/118530788
% k; l; o8 ?; T9 q
2 z  X4 \) Q" h6 Y  y
2 M8 T0 P8 r* ~8 I




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5