1)切片
就是索引,之前在数据类型里面介绍过了。这里补充一下其他的索引形式。
L[:10] #前10个数
L[-10:] #后10个数
L[10:20] #前11-20个数
L[:10:2] #前10个数,每两个取一个
L[::5] #所有数,每5个取一个
2)迭代
所谓迭代就是用for循环对一个列表或者元组进行遍历。在python中通常用for~in 来遍历元素。这个在for循环中已经介绍过了。
下面说一下,字典的遍历。因为字典与其他几种常用的数据类型不同,它是非顺序集合。示例代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
i={'a':1,'b':2,'c':3}
for key in i:
print key
这是对key进行遍历,也可以对value进行遍历。这里要用到iteritems()函数。示例代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
i={'a':1,'b':2,'c':3}
for value in i.iteritems():
print value
输出结果如下:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/练习.py
('a', 1)
('c', 3)
('b', 2)
同样也可以对键对进行遍历,示例代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
i={'a':1,'b':2,'c':3}
for k,v in i.iteritems():
print k,v
输出结果如下:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/练习.py
a 1
c 3
b 2
这里的结果就很明显了。
另外注意一点:
python中经常见到,for循环中引入两个变量。示例代码如下:
for x,y in [(1,1),(2,4),(3,9)]:
print x,y
结果如下:
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/练习.py
1 1
2 4
3 9
3)列表生成式
顾名思义,就是python中可以生成各种列表的式子。这里我们要用到for..in。这里介绍几种常见的,
a=[1,2,3,4,5]
print[x*x for x in a]
生成以下列表:
[1, 4, 9, 16, 25]
还可以加入if判断来筛选特定的数。
a=[1,2,3,4,5]
print[x*x for x in a if x%2==1] #取余判断奇偶
生成如下列表:
[1, 9, 25]
还可以使用双重循环,生成全排列:
print[m+n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
关键在[]这个列表符号。
4)生成式
生成式的设定是为了让程序充分利用内存空间。当我们遇到图像处理一类的数据时,需要大量的空间。但是直接定义列表的话。太占用空间了。因而,需要一种可以根据算法自动生成空间的式子,这种一边循环一边计算的机制,称为生成器(Generator)。
生成器有两种定义方式。第一种就是直接将列表生成式中的【】,换成()。示例代码如下:
i=[1,2,3,4,5]
(x*x for x in i)
那么如何将其中的元素打出来呢?可以用next()方法。
i=[1,2,3,4,5]
L=(x*x for x in i)
print L.next()
print L.next()
结果如下:
1
4
但是如果是一个很大的数据的话,得多少print?我们想到了用for。代码如下:
i=[1,2,3,4,5]
L=(x*x for x in i)
for x in L:
print(x)
这里要注意,这里generator保存的是算法。我们如果在本段程序之后,再尝试着打印一次元素。
我们可以看到:
这里说明,generator已经打印完毕。无法再计算了。
第二种,将循环中的print改为yield
我们由上面可以知道,可以利用循环来generate。比如我们要generate一个斐波那契数列,示例代码如下:
def func(x):
n,a,b=0,0,1
while n<x:
print b
a, b = b, a + b
n=n+1
func(5)
这里我们可以将print改成yield,就可以了。
但是直接改成 后,出现一个错误。generator object func at 0x01F603F0>。
经过查找资料,在一个国外论坛上看到一个高票回答,原话是这样的“In Python 3, print() is a function, not a statement.A generator expression is like a list comprehension, except it creates an object that produces results when you iterate over it, not when you create it.”在我理解就是生成器这个东西是一边算,一边输出的。而且输出的是描述。print这个东西是一个函数,比较死脑筋。它只对其描述进行了打印。然后就这样了。
这里有一点要注意:
yield 这个东西比较奇葩,程序执行到这里的话就会返回,然后下次执行的话会返回到上次yield 返回的地方。再向下一句执行。
---------------------
【转载,仅作分享,侵删】
作者:quinn1994
原文:https://blog.csdn.net/quinn1994/article/details/79586473
|
|