数学建模社区-数学中国

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

作者: 杨利霞    时间: 2021-7-8 15:11
标题: 一行Python代码到底有多强大?
( r) T* y/ B# z

! ^' z+ D: P+ D一行Python代码到底有多强大?" o& u7 h7 P; s. O+ T! b' ^
Python是一门非常简洁而优美的编程语言,在其他编程语言中需要繁琐的代码逻辑才能完成的事情,往往在Python中一行就可以解决。& ?# H0 q: |0 t" |: q1 w# |

  E& N6 N. }4 Q! S5 p+ m- F# P
4 R' O3 r7 S5 p! j, e# i" t' T
这样,它不仅可以减少开发工作量,还能够大大提升可读性,避免在开发复杂逻辑过程中造成的失误。
" }8 u. R8 f5 C5 q! J: m
+ I' Y0 U2 p$ x$ A4 ~

- n! W2 J6 K$ g# t# g+ {本文,就来给大家介绍10个一行代码到底有多强大!
6 b+ k4 g* a; h' F- ?# n& J
  Z  N2 I; K/ R. X: y
$ r3 ?4 o9 S, A3 D( J6 i
1. 交换变量" s* [2 s7 b3 `" R, D! }# P% p
如果大学学过C/C++编程课的同学,对于交换变量一定不会陌生,这是最基础,也是非常常用的。, z2 o7 T) I7 l% [+ a7 @
& b- w* Y+ b- {! W; |

- [# ?4 c4 w3 Q$ ^3 p. i如果用C/C++实现交换变量,需要这样的操作:
- S8 _" `  c  j% {# N4 M% \% Q/ c( c
0 n9 {# l3 i9 {- v
int a, b, c;6 S+ p6 b! {6 |( ]5 x4 Z
c = a;
3 s6 V3 r  m( |4 Ta = b;
5 h2 o/ y' R( F  Jb = c;, r/ ?' V2 p1 L- y% c
而在Python中,一行代码就可以完成变量的交换。
" ^  N- D" S% _, U$ S( J: w- l8 S% F1 Y5 e7 A! j7 x6 C- y3 s* P
( Z$ d2 t7 y$ M) P5 U0 |
# a = 1; b = 2# |) V, V' i& ?3 N" m5 [8 _" V
a, b = b, a' [! @5 M6 s' Z0 a4 G4 Q
# print(a,b) >> 2 1* g, W1 A  I5 ~! _/ s* D
这样,我们就不需要去额外定义一个临时变量,不仅简单,而且非常直观。
; j5 ^- ]2 A  @) Z
7 Z1 D3 [1 F7 {; `7 u5 `+ S, u) d

9 G4 g2 I* Z5 Y7 S2. 多变量分配  t7 b9 e# F0 ]! c
如果你在分配变量时同时包含多种类型的变量,这在很多编程语言中是无法实现的,但是在Python中一行代码就可以实现:
9 v9 C# A0 p7 u( p/ H) d( G- O( R4 ]1 S/ t
. ~8 N& U) F; g5 j4 }3 y) y: y
a, b, *c = [1,2,3,4,5]  D1 C4 v3 _0 d5 M% Z- d+ ?
# print(a,b,c) >> 1 2 [3, 4, 5]
; D* F( B/ i# N在Python中,可以通过符号*把列表元素分配给指定的变量,这也叫unpacking。
5 o, |( _! Q/ [2 q* |
% S1 i/ r3 N% M3 v0 _5 q" n  V& g

& r3 {$ q  h" p: l: b" n3. 每隔一个元素求和
( q; B5 b0 N6 _: p  O& x如果有这么一个列表[1,2,3,4,5,6],你想每隔一个元素进行求和[2, 4, 6],可以这样使用:
0 e0 ]% j9 \5 G8 c- K) J
. ^$ ^( ~0 i2 j  O8 i
  `( {, L7 ], t) G
# a = [1,2,3,4,5,6]9 m$ [. l% n9 M* X0 j. N! ~% ]
s = sum(a[1::2])0 ?5 H0 f5 L1 n  n- b- K- N, O; J5 j
# print(s) >> 12. M4 S  [, D0 l2 ^6 H" Z
这里,不需要利用复杂的逻辑,只需要合理利用Python切片就可以实现,[1::]标识,从第2个元素直到列表结束。
" h) C% D; v* P8 ]9 s- f! O2 p( |3 W8 h( W

& R, n" G& G/ u# p4. 删除多个元素, Q9 ?, ~) i. g1 r  t
# a = [1,2,3,4,5]
+ }! F. I/ I; `; q5 J) A- }del a[::2]/ k8 m. K7 G" x6 _) |9 q
# print(a) >> [2, 4]
2 E4 k/ A& _, k3 }+ I* x强大的切片语法也可以用于一次删除多个列表元素。
, r7 a4 A) e2 {' E4 k
7 t5 v3 K7 r  j8 b' g4 h- ^4 z
  a1 U: ]8 ^+ K6 ^. R
5. 将文件行读入到数组
9 [4 M4 X2 A3 h, ?如果条件或循环语句比较简单的话,可以利用列表达式去简化代码:
7 t' w7 d  K" H* d) Y3 l. v
9 ]0 J2 A2 ~; m0 T
' }' I9 o2 V+ I2 u6 f) A
c = [line.strip() for line in open('file.txt')]
  N* F! ]. z' T( S6. 将字符串写入文件
4 d! O# J8 R( V$ a对比于其他编程语言常用的open、close去读写文件,Python提供的with方法更加简单,而且不用特意去关闭文件:
( a3 H/ O1 g9 N. {5 H* t6 {' ~- ~+ Z9 V- c0 q8 Y; B  `2 E. N

( O- k' D) Z; zwith open('file.txt', 'a') as f: f.write('hello world')$ z; f/ R' L; O4 o3 ]4 g' l1 `, R
7. 创建清单
/ O3 L( P8 `# a) o可以使用内联for循环从其他列表中动态创建列表。您可以直接修改值,例如,下面示例中的字符串连接:
: T: M, K/ [' t! |, f: a2 f8 X- o, l" Q

) X/ S/ p( q9 f+ nl = [('Hi ' + x) for x in ['Alice', 'Bob', 'Pete']]4 _' Z8 Z' i% L4 I
# print(l) >> ['Hi Alice', 'Hi Bob', 'Hi Pete']) c( O- d6 D7 [9 j( c
8. 列表映射
* k: e. M: ?8 u5 C4 v; b可以使用Python的 map()函数将每个列表元素转换为另一种类型:3 @& O6 n& ?% X7 a: a- M7 W

. ]; t/ j0 @+ b( |/ L% ?

* I7 s  w1 g2 Ql = list(map(int, ['1', '2', '3']))1 b# _* F$ i0 P7 f' q+ S
# print(l) >> [1, 2, 3]
8 d  Z. ?1 k( B8 k0 B- O4 l9. 集合创建1 O/ p8 S8 K- o3 D8 x
列表达式除了使用简单的for循环语句,还可以结合条件语句一起使用:' t) L& a1 N# h; w, G

9 i$ K! M: M5 K8 z( Z0 J* P

1 y+ N; o- z7 H  rsquares = { x**2for x in range(6) if x < 4 }4 z: L- C. {9 D: T9 i5 _( Q0 \5 x
# print(squares) >> {0, 1, 4, 9}; P3 e! D: N% z( l6 U, d# K
10. 回文检查; c* j. q, t& z
回文检查是笔试题经常会出现的一类问题,简单来说,它就是向前和向后都读取相同的字符,这也难倒了不少应届毕业生,利用Python,一行代码就可以完成:% e! I: n8 r" |; N
# C/ j9 x. e' Y) w6 X( k

1 [# n. r9 h, v# phrase = 'deleveled'
6 c& ]  Y6 W: V) a! L9 O$ VisPalindrome = phrase == phrase[::-1]
7 p1 P& U; T$ @) ]( }" D, \; O+ J$ C# print(isPalindrome) >> true7 c6 {/ A& w7 m; ?4 @
结语0 J) K2 S5 D8 r
进阶Python过程中,会涉及的编程技巧远不止于此,要想深入并精通Python,需要我们持续学习,并且不断的总结。, R: n' Y5 l# J3 l

# V8 Q; r6 O) y. v2 a

, c' P5 P7 b# ?6 b- z, F提升编码技能最简单有效的方法可以总结两点:“多看别人代码,多让别人看自己的代码”。
# O: v* X! c9 q1 R7 R
  X( c0 [6 v' H% |: z0 u% }

3 `- |; O1 S6 r  t不同人的思路,实现方法不尽相同,看别人代码过程中,可以看到与众不同的编码方式,可以从中汲取一些优点。# l, e* u0 P9 u
# z- _$ W/ d/ c

$ Z. t0 K- X; g, P6 |5 t0 Z  q多让别人review自己的代码,能够不断的鞭策、激励自己改掉编码过程中的不好习惯,错误用法。
! r5 w4 v! D7 A" s+ d' C6 k4 i7 `7 q( e6 ^: g& A

1 ^0 b! L* B& n$ v, V* q干货推荐1 b+ _, \0 Z& Y, M: J
为了方便大家,我花费了半个月的时间把这几年来收集的各种技术干货整理到一起,其中内容包括但不限于Python、机器学习、深度学习、计算机视觉、推荐系统、Linux、工程化、Java,内容多达5T+,我把各个资源下载链接整理到一个文档内,目录如下:
3 b* r3 o- n0 ]! r2 h$ m/ I. c; N' q& E$ R+ i

) m. F: O+ \% N! D* S- Y: ]! U. [* t( r5 J- b8 O! Y1 Q
* N& C  k5 M3 ~) B! t4 [4 r
5 t& v: ~, u3 n; b$ L0 {4 [) y
0 y/ ~) M* a# `1 y* i
所有干货送给大家,希望能够点赞支持一下!* O6 U9 U6 Y( F. J9 H, u* ]

% j4 Z- a9 ^- D

9 o6 X  O1 a; M: l+ Q$ Phttp://pan.baidu.com/s/1eks7CUyjbWQ3A7O9cmYljA (提取码:0000)3 Q. n# b! o8 O5 [" |
————————————————
9 {- Z4 _9 v* k8 V& B6 N$ r' c版权声明:本文为CSDN博主「七步编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 |3 O' W2 Z! G. Z" f% k
原文链接:https://blog.csdn.net/jakpopc/article/details/1185307889 i- g4 a6 _! C5 J1 l. F

, l' C0 G$ F  K: ?
% a* [- O2 Q  W! w2 V




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