数学建模社区-数学中国

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

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

) o# o$ Z: o' F6 G. R6 [8 v& D& u5 f" Q6 C) r9 C" N
一行Python代码到底有多强大?
; g2 x7 W* d  @: W7 B8 z. R9 K2 wPython是一门非常简洁而优美的编程语言,在其他编程语言中需要繁琐的代码逻辑才能完成的事情,往往在Python中一行就可以解决。
* l' E- f) ~! [& q2 Z
9 v, R4 @- k: `/ a
! o2 ^6 O7 `' e2 g
这样,它不仅可以减少开发工作量,还能够大大提升可读性,避免在开发复杂逻辑过程中造成的失误。
3 @# F  i% _1 S( A0 E3 L7 M& y( m: k% K: @
& q" c+ x0 a3 s
本文,就来给大家介绍10个一行代码到底有多强大!1 g$ ^3 @5 ]* T; S0 w
# N4 `, x) {+ Z# P7 R

2 |: t" T2 {/ c  v/ P1 S  x1. 交换变量
8 v' h0 \3 U6 K8 D  `: O8 Z  c如果大学学过C/C++编程课的同学,对于交换变量一定不会陌生,这是最基础,也是非常常用的。
6 t' [0 ~' j/ \9 I) \# n. q: {+ v) l9 ^$ f7 d0 O
+ L8 B9 B1 ]: i4 x  y" x; O2 ^
如果用C/C++实现交换变量,需要这样的操作:# [6 j/ Q: Q6 @# b4 r9 E( x1 k: w

" N, F# [( a5 S2 \  H1 |

) Q, v, x2 w* s; v4 J. xint a, b, c;2 S. K( A7 ?/ C/ E6 H
c = a;5 R% y" q8 i. P" e! I, t% |; F6 W  _
a = b;
2 {) }2 Z$ u- |- P) b1 P( vb = c;
) A# D' y# e' x$ N而在Python中,一行代码就可以完成变量的交换。5 x" F3 o2 {# Y* P! d" L$ |6 D
/ ^# ]9 N7 J# G3 r3 B9 x

* x0 j% R1 v, u1 P$ t3 w  ]$ `# a = 1; b = 2
6 w& ^5 F- _0 T3 _9 ga, b = b, a7 y$ d, K$ @) k' [# R! z4 k
# print(a,b) >> 2 1
9 R3 q: d* q' V8 r( M/ T/ D这样,我们就不需要去额外定义一个临时变量,不仅简单,而且非常直观。
) e/ o; k8 ^+ \$ x  o4 J4 B6 @" E) Y7 p1 N2 i  E  F# e3 \+ J

, S2 |$ n9 D% N2 D2. 多变量分配
" Z( v+ _: \; z* v2 c2 ]& r# v如果你在分配变量时同时包含多种类型的变量,这在很多编程语言中是无法实现的,但是在Python中一行代码就可以实现:
% r4 y$ K2 Y4 |. j. Z' f! X# y% t# `6 s

) w2 e- q, _0 `; }. j/ c. Na, b, *c = [1,2,3,4,5]# X/ F& B0 }" Y# m  H$ e
# print(a,b,c) >> 1 2 [3, 4, 5]' p: ]4 \' c6 \! o  c; T" a1 B
在Python中,可以通过符号*把列表元素分配给指定的变量,这也叫unpacking。
3 H) y* G/ I, o, q2 t: h& n5 F. f; `/ `5 a4 Z

  c  L- T+ ]2 G& g& y3. 每隔一个元素求和
% K, u% d+ k7 T" H; H如果有这么一个列表[1,2,3,4,5,6],你想每隔一个元素进行求和[2, 4, 6],可以这样使用:
  \! ]: }. H" n2 G6 B
8 X9 h: {! ]: R# |# |

, E& A' F/ H' s; G# a = [1,2,3,4,5,6]
; f* v0 G2 R+ @$ F9 I, ?: qs = sum(a[1::2])
: }  q/ w: y. D* K# print(s) >> 12! u, d- R* ?* H) F, A
这里,不需要利用复杂的逻辑,只需要合理利用Python切片就可以实现,[1::]标识,从第2个元素直到列表结束。
4 G" N3 l) Y. i7 ^$ ?9 N! P+ i, ^& [' W! N' t
0 p$ u1 q% `1 D3 u8 g' g2 V( x
4. 删除多个元素9 w, U/ Z% e- ?2 j- K  a
# a = [1,2,3,4,5]
$ r9 b0 P& x; ~! L% l' l+ jdel a[::2]2 r+ p5 t# W' c, L4 D. r
# print(a) >> [2, 4]; H# u. U% j1 F  q6 B/ y5 t
强大的切片语法也可以用于一次删除多个列表元素。- V( l0 e6 M0 y- T8 y1 X
# u# [/ B9 f. H& d: s) O9 o4 x* N/ _* [

' w3 u  E# z( K! a* A7 s/ O5. 将文件行读入到数组, c) F, s& R2 V5 o" s& }0 z6 ]' B
如果条件或循环语句比较简单的话,可以利用列表达式去简化代码:8 m- _- d; k5 F0 P9 k

! m* w; H. P) }7 |7 ?5 l: J

$ V2 R1 V: Z. h; f  m8 i' {c = [line.strip() for line in open('file.txt')]; R$ Z" K; C9 p2 M
6. 将字符串写入文件, r# C3 {) k$ q; I6 a" O( h
对比于其他编程语言常用的open、close去读写文件,Python提供的with方法更加简单,而且不用特意去关闭文件:& w" ?- U4 h' b2 [4 B( i5 w9 ~- B6 ?
' n3 |2 N. A1 }7 s; }# ]
# {# Y' C5 j- s0 E4 M0 `
with open('file.txt', 'a') as f: f.write('hello world'): C/ q; ~. O2 h1 P: {- M" p" k
7. 创建清单
7 _. A5 H0 ^: b& e/ Z可以使用内联for循环从其他列表中动态创建列表。您可以直接修改值,例如,下面示例中的字符串连接:
- e5 D4 X; Z8 j# n, G$ F' z; ^+ {* C

9 w; e4 X8 ]' Hl = [('Hi ' + x) for x in ['Alice', 'Bob', 'Pete']]
3 ~, }6 Z2 c! O3 C8 y% C# print(l) >> ['Hi Alice', 'Hi Bob', 'Hi Pete']
/ K7 X, S- b$ J% D- v8. 列表映射1 z( \. @9 [4 j) Y' C$ z6 {
可以使用Python的 map()函数将每个列表元素转换为另一种类型:
4 i( U1 H) W9 I( x# @2 w
  a4 P. O( a( ~5 ^( X

' c* z) x7 C* r) _l = list(map(int, ['1', '2', '3']))
' q( ?0 E; K( A- O. n3 s# print(l) >> [1, 2, 3]
! B! y/ d. B7 f' e% B5 c9. 集合创建3 ?( {3 A9 f' g3 j( Y& [' M
列表达式除了使用简单的for循环语句,还可以结合条件语句一起使用:
& b' B+ ^4 H/ F+ w
( @/ x* v  P4 J3 l

8 l: n+ I0 ]4 gsquares = { x**2for x in range(6) if x < 4 }
8 S; o& ^8 N) y3 t* M2 \# print(squares) >> {0, 1, 4, 9}* L# P9 d5 c0 ]- ?9 O  B. g4 x
10. 回文检查
6 Q1 {/ @/ A0 Z8 W/ d9 j5 A& y回文检查是笔试题经常会出现的一类问题,简单来说,它就是向前和向后都读取相同的字符,这也难倒了不少应届毕业生,利用Python,一行代码就可以完成:3 `# X' c( Y8 K/ O4 T
) A1 i7 c# n% U8 D* `5 c

5 G+ @# A5 F$ D4 Z: [3 {3 l! i, k# phrase = 'deleveled'
% A+ @+ f5 c' @9 AisPalindrome = phrase == phrase[::-1]" {9 a: v0 I& e* L. }- i# s" ~
# print(isPalindrome) >> true0 ^; S9 Z( W" u9 J/ |2 x( H5 `; }
结语
, B  Z8 Y- W$ T6 z% l进阶Python过程中,会涉及的编程技巧远不止于此,要想深入并精通Python,需要我们持续学习,并且不断的总结。
7 `  A8 R# d7 k
' g3 Z/ V6 P1 A. o8 j, F

: c4 J* M! r4 T提升编码技能最简单有效的方法可以总结两点:“多看别人代码,多让别人看自己的代码”。% A& z# L) W* [' u* O9 n' u7 O

' g9 z; H6 K/ `

: a+ v: c! v/ j' y* z1 R! G不同人的思路,实现方法不尽相同,看别人代码过程中,可以看到与众不同的编码方式,可以从中汲取一些优点。1 v0 m) {+ I4 }; Q' T
: l$ W. O# v) i- k+ r6 O# Y( @
3 @, V& @) B" t! G, x& c" q" S
多让别人review自己的代码,能够不断的鞭策、激励自己改掉编码过程中的不好习惯,错误用法。( P5 `( S4 H' b# _3 g
' `( x4 z( r9 T# L" Q0 X1 H
) u# g6 R/ D( C' N+ f
干货推荐2 a  w+ o! C- e4 L% V
为了方便大家,我花费了半个月的时间把这几年来收集的各种技术干货整理到一起,其中内容包括但不限于Python、机器学习、深度学习、计算机视觉、推荐系统、Linux、工程化、Java,内容多达5T+,我把各个资源下载链接整理到一个文档内,目录如下:
& f+ q' H& H$ j# s7 U) f$ `, w! ]3 g
! Q. t' s9 D" p2 [6 |+ t
$ W: `7 B: e5 B: H; n
: F: |' V+ x! V  W2 m8 q
% L3 J) N/ c$ X4 z1 T- G* Z

. I. _8 }9 p4 {$ ?1 W# C# n7 x  L

# W3 }; y5 l2 G* Z! q. ]6 s  P8 `所有干货送给大家,希望能够点赞支持一下!
- T& w$ M5 p) C# v/ R7 o
( @5 O) |1 G' L, A# p- n

% G& f/ N6 P2 a7 |0 \9 |http://pan.baidu.com/s/1eks7CUyjbWQ3A7O9cmYljA (提取码:0000)
% E, Y7 V( _8 I0 K' P6 [. W9 Y' G' h8 Q————————————————
( ?1 U5 Z3 t/ J6 R版权声明:本文为CSDN博主「七步编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。! O8 g% o4 f) y4 [; v+ Q( L
原文链接:https://blog.csdn.net/jakpopc/article/details/118530788
6 A# v; ~2 S, U6 G+ K6 \. g+ v5 j; Q, e+ c

: g& L8 A0 x3 l




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