博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3学习笔记14-迭代与列表生成式
阅读量:6315 次
发布时间:2019-06-22

本文共 1646 字,大约阅读时间需要 5 分钟。

迭代

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)

在Python中,迭代是通过for...in来完成的。

d = {
'a':1,'b':2,'c':3}for key in d: print(key)

默认情况下,dict迭代的是key

 

 

for value in d.values():    print(value)

如果要迭代value,可以用for value in d.values()

 

 

for k,v in d.items():    print(k,v)

如果要同时迭代key和value,可以用for k, v in d.items()

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

for ch in 'ABCD':    print(ch)

只要是可迭代对象,都可以迭代,不用关心该对象究竟是list还是其他数据类型

可以通过collections模块的Iterable类型判断

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

如果要对list实现类似Java那样的下标循环怎么办

Python内置的enumerate函数可以把一个list变成索引-元素对

for i,value in enumerate(['a','b','c']):    print(i,value)

列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

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

print(list(range(1, 11)))

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

L = []for x in range(1,11):    L.append(x*x)print(L)

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

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来

for循环后面还可以加上if判断,比如选出仅偶数的平方:

x = [x*x for x in range(1,11) if x%2==0]print(x)

还可以使用两层循环,可以生成全排列:

e = [m + n  for m in 'abc' for n in 'xyz']print(e)

运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

import osprint([d for d  in os.listdir('.')])#os.listdir可以列出文件和目录

 

for循环可以使用两个或多个变量

c = {
'x':1,'y':2,'z':3}for k,v in c.items(): print(k,v)#因此列表生成式可以使用两个变量来生成listx = {
'x':'A','y':'B','z':'c'}print([k + '= '+ v for k ,v in x.items()])

把list所有字符串变成小写

j = ['Hello','Word','IBM','Apple']print([s.lower() for s in j ])

转载于:https://www.cnblogs.com/myal/p/9337416.html

你可能感兴趣的文章
OpenTest:CodedUI如何支持下拉树形列表选择?
查看>>
STM32 NVIC学习
查看>>
无数据库日志文件恢复数据库方法两则
查看>>
VS中"生成注释WEB页"的问题
查看>>
数据库中非空字段。在MAP时应该注意的问题。
查看>>
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera...
查看>>
推荐十几款Firefox web开发插件
查看>>
关于C#中AutoResetEvent和ManualResetEvent的一点学习心得
查看>>
C# 委托的同步调用和异步调用
查看>>
How do I get data from a data table in javascript?
查看>>
禁止CloudStack删除Xenserver原有虚拟机
查看>>
hdu 3177
查看>>
HTML入门教程
查看>>
[LintCode] Find the Connected Component in the Undirected Graph
查看>>
sudo apt-get 和dpkg命令大全
查看>>
那是什么进程 —— jusched.exe是什么? 它为何运行?
查看>>
ASP.NET 应用程序生命周期
查看>>
SqlStoredProc池
查看>>
[转]以安装桌面体验功能为例来探索windows2012服务器管理器的新变化
查看>>
fastscript调用delphi方法和DELPHI调用FASTSCRIPT方法
查看>>