迭代

在python中迭代是通过for ....in...完成的,只要是可迭代对象都可以迭代

#!usr/bin/python
#-*- coding:UTF-8 -*- #tuple迭代
t=[(1,'a','z'),(2,'b','z')]for x,y,z in t:
print(x,z) #enumerate函数可以把一个list或者tuple变成“索引-元素”对
for i,value in enumerate(t):
print(i,value) 》1 z
》2 z 》0 (1, 'a', 'z')
》1 (2, 'b', 'z')

注意:这里输出的其实是tuple(括号省略掉了)

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

#dict的迭代
d={'city':'SH','age':12,'sex':'G'}
for k in d.items():
print(k) 输出》
('city', 'SH')
('age', 12)
('sex', 'G')

判断

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

#Iterable类型判断 使用isinstance函数
from collections import Iterable
#str是否可以迭代
print('str是否可以迭代',isinstance('abc',Iterable))
#list是否可以迭代
print('list是否可以迭代',isinstance([1,2,3],Iterable))
#整数是否可以迭代
print('整数是否可以迭代',isinstance(123,Iterable)) 输出》
str是否可以迭代 True
list是否可以迭代 True
整数是否可以迭代 False

使用迭代

使用迭代返回一个list的最小值和最大值

#使用迭代找到list中的最小值和最大值并返回
def findMinAndMax(L):
if L==[]:
return (None,None)
min=max=L[0]
for n in L:
if min>n:
min=n
if max<n:
max=n
return (min,max) print(findMinAndMax([1,3,4,55,2]))
》(1, 55)

列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。写列表生成式要把元素放在前面,后面for...in...,后面可以加i判断,比如:

#列表生成式
li=[x*x for x in range(1,11) if x%2==0]
print(li) 》[4, 16, 36, 64, 100]

应用

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

import os#导入os模块
print([s for s in os.listdir('.')]) 》['DLLs', 'Doc', 'include', 'iter.py', 'Lib',
'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe',
'python3.dll', 'python36.dll', 'pythonw.exe',
'README.txt', 'Scripts', 'tcl', 'Tools', 'vcruntime140.dll']

列表生成式也可以添加if语句

通过添加if语句将list中的字符串小写

# -*- coding: utf-8 -*-
L1 = ['Hello', 'World', 18, 'Apple', None]
L2=[s.lower() for s in L1 if isinstance(s,str)]
print(L1)
print(L2) 》['Hello', 'World', 18, 'Apple', None]
》['hello', 'world', 'apple']

生成器

在Python中,这种一边循环一边计算的机制,称为生成器:generator。

未完待续。。。

python——高级特性(2)的更多相关文章

  1. 三、python高级特性(切片、迭代、列表生成器、生成器)

    1.python高级特性 1.1切片 list列表 L=['Mli','add','sal','saoo','Lkkl'] L[0:3]  #即为['Mli','add','sal']  从索引0开始 ...

  2. python高级特性:切片/迭代/列表生成式/生成器

    廖雪峰老师的教程上学来的,地址:python高级特性 下面以几个具体示例演示用法: 一.切片 1.1 利用切片实现trim def trim(s): while s[:1] == " &qu ...

  3. python高级特性和高阶函数

    python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...

  4. Python高级特性(3): Classes和Metaclasses(转)

    原文:Python高级特性(3): Classes和Metaclasses 类和对象 类和函数一样都是Python中的对象.当一个类定义完成之后,Python将创建一个“类对象”并将其赋值给一个同名变 ...

  5. Python高级特性(2):Closures、Decorators和functools(转)

    原文:Python高级特性(2):Closures.Decorators和functools 装饰器(Decorators) 装饰器是这样一种设计模式:如果一个类希望添加其他类的一些功能,而不希望通过 ...

  6. Python高级特性(1):Iterators、Generators和itertools(转)

    译文:Python高级特性(1):Iterators.Generators和itertools [译注]:作为一门动态脚本语言,Python 对编程初学者而言很友好,丰富的第三方库能够给使用者带来很大 ...

  7. Python高级特性之:List Comprehensions、Generator、Dictionary and set ...

    今天帅气的易哥和大家分享的是Pyton的高级特性,希望大家能和我一起学习这门语言的魅力. Python高级特性之:List Comprehensions.Generator.Dictionary an ...

  8. Python 高级特性介绍 - 迭代的99种姿势 与协程

    Python 高级特性介绍 - 迭代的99种姿势 与协程 引言 写这个笔记记录一下一点点收获 测试环境版本: Python 3.7.4 (default, Sep 28 2019, 16:39:19) ...

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

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

  10. Python 高级特性(1)- 切片

    前言 面 tx 被问到 python 的高级特性相关,这里做个补充学习吧 正向范围取值 关键点 首位下标是 0 第一个数字是起始下标,第二个数字是结束下标(但最终结果不包含它) 代码块一 # 正向范围 ...

随机推荐

  1. Kubernetes 集群安装部署

    etcd集群配置 master节点配置 1.安装kubernetes etcd [root@k8s ~]# yum -y install kubernetes-master etcd 2.配置 etc ...

  2. ELK学习链接

    1.  ELK原理与介绍 2. ELK部署记录

  3. Utils工具方法集插件详解

    var Utils = function(){}; Utils.text = { stripTags: function (val) { return val.replace(/<\/?[^&g ...

  4. [RHEL] 配置 LVM 卷

    [RHEL] 配置 LVM 卷 一.Introduction 基础预览 :LVM 认知与扩容操作 高端实战:Linux系统如何迁移至LVM磁盘 之前转过一篇文章 LVM分区在线扩容 ,其原因是我需要给 ...

  5. PUSH的整体设计

  6. 异步 JavaScript - 事件循环

    简评:如果你对 JavaScript 异步的原理感兴趣,这里有一篇不错的介绍. JavaScript 同步代码是如果工作的 在介绍 JavaScript 异步执行之前先来了解一下, JavaScrip ...

  7. [总结帖]Web小白的基础恶补帖

    1. jQuery实现按钮点击跳转网页 <script src="js/jquery/jQuery-2.2.0.min.js" type="text/javascr ...

  8. 架构师养成记--35.redis集群搭建

    前记:redis哨兵经验之谈.哨兵做主从切换可能要花费一两秒,这一两秒可能会丢失很多数据.解决方法之一是在java代码中做控制,try catch 到 链接断开的异常就sleep 一两秒钟再conti ...

  9. QuantLib 金融计算——数学工具之优化器

    目录 QuantLib 金融计算--数学工具之优化器 概述 Optimizer Constraint OptimizationMethod EndCriteria 示例 Rosenbrock 问题 校 ...

  10. Secondary NameNode究竟是做什么的

    Secondary NameNode:它究竟有什么作用? 在hadoop中,有一些命名不好的模块,Secondary NameNode是其中之一.从它的名字上看,它给人的感觉就像是NameNode的备 ...