Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ

  最近太忙啦。很多事情需要自己处理,感觉时间不够用啊~~~~今后,博客更新时间可能会慢下来(但不能荒废了学习,要学习就得进行总结,哪怕借鉴前辈的学习资料),因此,无论闲忙,总是要学会总结。哈哈,正所谓“人不为己,天诛地灭”嘛。嘿嘿,没这么回事,说笑的……好像又扯远了。OK,回归正题,下面将回到Python先~~~

  Python编程中,你如果要编写出很多有用的程序,必须掌握数据类型、语句和函数。对于Python编程,原则有二:一是代码不是越多越好,而是越少越好;二是代码不是越复杂越好,而是越简单越好。你还想“一行代码两块钱”。效率决定一切。

  下面来个例子(不然,全是文字,会晕~~~)【实现1,3,5,7,9,……99的列表】:

 #赚钱版代码
>>>n = 1
>>>L = []
>>>while n <= 99:
... L.append(n)
... n = n + 2
...
>>>print(L) #好多money,但老板不一定会给噢
#略缩版代码
>>>L= list(range(1,100,2))
>>>print(L)
#终极版代码
>>>[x for x in range(1,100,2)]

  其实,上述代码涉及到的代码主要包括循环、range()、分片、列表生成式。通过例子,我们知道:Python提供了很多有用的高级特性,灵活运用这些特性,可以减少我们很多代码量,提高效率。

切片

  切片是Python编程的高级特性之一。切片可以访问一定范围内的元素,通过冒号(:)【该冒号是英文版的】隔开两个索引实现。

  关于Python编程中的符号(比如冒号,逗号,括号……)都是英文版的【重要的事情说好多遍,因为自己平时编程也会时常出现这类错误】,否则程序编译会有Error,而且这种类型的错误还不好发现。因此,细节决定高度~~~

 #切片的魔力
>>>L = [1,2,3,4,5,6,7,8,9,10]
>>>L[2:5]
3,4,5
>>>L[0:1]
1

  切片操作的实现需要提供两个索引作为边界,第一个索引的元素是包含在切片内的,而第二个则不包含在切片内。

  注:如果第一个索引是0,可以省略:

 >>>L = [1,2,3,4,5,6,7,8,9,10]
>>>L[0:3]
1,2,3
>>>L[:3]
1,2,3

  既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片:

 >>>L = [1,2,3,4,5,6,7,8,9,10]
>>>L[-2:]
9,10
>>>L[-2,-1]
9

  Python 3.x版本中,切片操作还支持步长

 >>>L = [1,2,3,4,5,6,7,8,9,10]
>>>L[::1]
[1,2,3,4,5,6,7,8,9,10]
>>>L[0:10:2]
[1,3,5,7,9]
>>>L[1:10:5]
[2,7]

  tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

 >>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)

  字符串’xxx’也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

 >>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'

  Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。

  Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。

迭代

  Iteration是Python编程中最重要的高级特性。迭代(Iteration):给定一个list或tuple,通过for循环来遍历这个list或tuple。故而,Python是通过for...in循环实现迭代的。

  list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:

 >>> d = {'A': 1, 'B': 2, 'C': 3}
>>> for key in d:
... print(key)
...
A
B
C
>>> 

  因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

  默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

  由于字符串也是可迭代对象,因此,也可以作用于for循环:

 >>> for ch in 'ABC':
... print(ch)
...
A
B
C

  因此,当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。

  那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

 >>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False

  在for循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:

 >>> for x, y in [(1, 1), (2, 4), (3, 9)]:
... print(x, y)
...
1 1
2 4
3 9

  任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环。

列表生成式

  列表生成式作为Python编程的高级特性,可以简化不少代码量。列表生成式(List Comprehensions)是Python内置的非常简单却强大的可以用来创建list的生成式。

  举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):

 >>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

  但如果要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?方法一是循环:

 >>> L = []
>>> for x in range(1, 11):
... L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

  但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

 >>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

  写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

 >>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

  列表生成式也可以使用两个变量来生成list:

 >>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

  把一个list中所有的字符串变成小写:

 >>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

  列表生成式不是真正的语句,而是看起来像循环的表达式,这是将它归为循环语句的原因。该功能很强大,但大多数情况下,直接使用循环和条件语句也能完成。然而,列表生成式的程序十分简洁,更加易读。

  下面来个例子:

 L1 = ['Hello', 'World', 18, 'Apple', None]
L2= [s.lower() for s in L1 if isinstance(s,str)]

出处:https://www.cnblogs.com/SmallWZQ/p/8544521.html

Python编程核心内容 ---- 切片、迭代和列表生成式的更多相关文章

  1. Python编程核心内容之二——切片、迭代和列表生成式

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 最近太忙啦.很多事情需要自己处理,感觉时间不够用啊~~~~今后,博客更新时间可能会慢下来,哈哈,正所谓"人 ...

  2. Python编程核心内容之一——Function(函数)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 截至上篇随笔<Python数据结构之四--set(集合)>,Python基础知识也介绍好了.接下来准备干 ...

  3. Python编程核心内容 ---- Function(函数)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 截至上篇随笔<Python数据结构之四——set(集合)>,Python基础知识也介绍好了.接下来准备干 ...

  4. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  5. Python的高级特性之切片、迭代、列表生成式、生成器

    切片 切片就是获取一个list.tuple.字符串等的部分元素 l = range(100) #取[0,5)元素 print(l[:5]) #[0, 1, 2, 3, 4] #在[0,99]中每隔10 ...

  6. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...

  7. Python编程核心之makeTextFile.py和readTextFile.py

    引言: 最近大半年都在学习python编程,在双十一的时候购买了<Python编程核心>,看到makeTextFile.py和readTextFile.py两个例子有点错误,所以在这里给修 ...

  8. Python编程从入门到实践笔记——列表简介

    Python编程从入门到实践笔记——列表简介 #coding=utf-8 #列表——我的理解等于C语言和Java中的数组 bicycles = ["trek","cann ...

  9. Python 编程核心知识体系(REF)

    Python 编程核心知识体系: https://woaielf.github.io/2017/06/13/python3-all/ https://woaielf.github.io/page2/

随机推荐

  1. 线程、进程、daemon、GIL锁、线程锁、递归锁、信号量、计时器、事件、队列、多进程

    # 本文代码基于Python3 什么是进程? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行 ...

  2. JDBC 连接Oracle 数据库,JDBC 连接Mysql 数据库

    首先是JDBC 连接Oracle  数据库 package com.util; import com.pojo.UserInfo; import java.sql.*; public class DB ...

  3. 20145311 《Java程序设计》第十周学习总结

    20145311 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 ·网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据·程序员所作的事情就是把数据发送到指定的位置 ...

  4. VC/MFC 编程技巧大总结

    1 toolbar默认位图左上角那个点的颜色是透明色,不喜欢的话可以自己改. 2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息. 3 Java学习书推荐 ...

  5. [问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题

    问题描述:由单片机的VCC引脚供电,使用L298N控制两个电机,发现左右两个轮子的转速老是不一样,更多的情况是左轮转速高(左轮电机接OUT1和OUT2),右轮转速低(右轮电机接OUT3和OUT4)甚至 ...

  6. python函数返回局部变量,局部&全局变量同名问题

    其实关于返回局部变量不只是python的问题,凡是使用堆栈结构处理函数的语言都会有这样的问题,切记不要返回局部变量.因为当创建函数的堆栈撤销,所有对局部变量的修改都灰飞烟灭.来看我的小例子 def h ...

  7. java学习之浅谈多线程3--线程间协作

    通过保证临界区上多个线程的相互排斥,线程同步完全可以避免竞争状态的发生,但是有时还需要线程之间的协作.有两种方式可用于线程间的通信. 1.使用条件Condition Condition接口: +awa ...

  8. BZOJ 3529 【SDOI2014】 数表

    题目链接:数表 我们一起来膜PoPoQQQ大爷的题解吧Orz 首先我们来考虑没有\(a\)的限制该怎么做.显然交换\(n\),\(m\)答案不变,所以后面默认\(n \le m\). 我们定义两个函数 ...

  9. js脚本控制图片水平与垂直居中

    使用方法: 1.定义ResizeImg(obj)方法 function ResizeImg(obj) { var boxHeight = $(".box").height(); v ...

  10. python 列表元素统计出现的次数并输出字典

    import collections my_list = [,,,,,,,,,,,,] print("Original List : ",my_list) ctr = collec ...