码迷,mamicode.com
首页 > 编程语言 > 详细

Python迭代和列表生成器

时间:2017-09-27 19:14:01      阅读:440      评论:0      收藏:0      [点我收藏+]

标签:其他   模块   rabl   第一个   类型   fit   首字母   表达   log   

使用for循环遍历list和tuple,这种遍历成为迭代

在如C语言中都是通过下标拿到值,for...in这种方式其实是相同的。

在函数的一节,这样说--->‘求和函数sum(),sum(iterable,start),第一个参数必须是可以迭代对象,listtuple。’  可迭代对象为list,tuple

所以使用for遍历时,对象是要可以迭代的。

如何判断一个对象能不能迭代?

Python的collections模块的Iterable可以判断是否可以迭代;   isinstance()函数用来判断某种数据类型是否是已知的类型

>>>isinstance(1,int)
Ture
>>>isinstance(‘abc‘,str)
Ture
>>>isinstance(3.14,float)
Ture
>>>isinstance(‘3.14‘,float)
False
#####################################


from
collections import Iterable

>>>isinstance([1,2,3,4,5],Iterable)
Ture
>>>isinstance(12345,Iterable)
False
>>>isinstance((1,2,3,4,5),Iterable)
Ture
>>>isinstance({‘name‘:‘jkl‘,‘age‘:15},Iterable)
Ture

所以dict能使用for遍历处key或values或key,values

dict是一个能迭代的对象,具体的看使用环境

 

如何让一个list或者tuple同时显示下标和元素?

Python提供了enumerate()函数,把list或者tuple变成了:索引-元素对,就像键值对

t = [1,2,3,4,5]
for k,v in enumerate(t)
        print(k,‘-‘,v)
0-1
1-2
2-3
3-4
4-5
5-6

 

 

列表生成式

如要生成一个L = [2,4,6,8,10,12,14,......100]这样的list;

可以切片取出:

#这里使用list()把range()函数生成的序列数转成list,tuple也以同样的方法
>>>L = list(range(1,101)) >>>L1 = L[1::2] >>>L1 [2,4,6,8,10,........]

还可以使用函数:

def create():
L = []
for x in range(1,51):
L.append(x*2)
print(L)
return

create()
[2,4,6,8,10,12,......100]

以上代码都挺麻烦,使用列表生成式一行就可以解决掉

[x * 2 for x in range(1,101)]
[2,4,6,8,10,.....100]

生成式还可以两个for循环嵌套,生成了一个全排列

[m * n for m in range(1,3) for n in range(1,5)]

[1,2,3,4,2,4,6,8]

迭代表达式

t = (1,2,3,4,5,6)
[k for k in t]
[1,2,3,4,5,6]

加上其他的限定条件:一个list包含多个数据类型,取出字符串并将首字母大写

L = [grant,fitz,15,3.14,None]
[x.title() for x in L if instance(x,str)]
[Grant,Fitz]

 

Python迭代和列表生成器

标签:其他   模块   rabl   第一个   类型   fit   首字母   表达   log   

原文地址:http://www.cnblogs.com/mzc1997/p/7603140.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!