• 技术文章 >Python技术 >Python基础教程

    超详细的Python中与迭代相关的函数

    silencementsilencement2019-07-10 15:08:21原创2772

    下面要介绍的enumerate、range、zip、reversed、sorted属于Python内置的函数或者类别,返回的对象都可通过迭代方法访问。

    一、enumerate函数

    1.语法:enumerate(iterable, start=0)

    1)该函数Python 2.3. 以上版本可用,2.6 添加 start 参数,返回一个枚举对象,该枚举对象是一个迭代器,该函数将iterable对象中的元素转换成枚举值,并每个元素分配一个从start开始的索引值;

    2)参数iterable,表示一个可迭代对象如序列;

    3)参数start表示索引值的起始值,默认为0;

    4)enumerate() 返回的枚举对象通过next函数或 __next__ 方法返回一个元组,里面包含索引值(从 start 开始,默认为 0)和通过迭代 iterable 获得的对应元素值。

    2.对于一个可迭代的(iterable)/可遍历的对象,enumerate可以将其组成一个索引序列,利用它可以同时获得索引和值,这种方式一般用在 for 循环当中;

    3.注意其返回值是一个迭代器,遍历访问后元素就清空了

    4.举例:

    1)s=enumerate('abc',100)?
    l =list(s) ?#l的值为:[(100, 'a'), (101, 'b'), (102, 'c')]
    2)for index, string in enumerate('ABC',10):print(index,':',string,', ',end='')

    输出:

    10 : A , 11 : B , 12 : C ,

    二、range函数

    1.语法:

    range(start, stop[, step])

    1)返回值是一个不可变的数字序列可迭代对象,类型为range,该数字序列通常用于在 for 循环中循环指定的次数;

    2)参数start为可选参数,表示数字序列的起始值,可以省略,默认为0;

    3)参数stop为必选参数,表示整数序列的终止值,产生的序列的值必须小于该值,当range只带一个参数调用时,该参数就是stop的值;

    4)参数step表示序列两个元素间的步长,也就是序列中相邻两个元素的差值,可选参数,默认为1;每个元素的值r[i]= ?start + step*i ,当step为正整数时产生的序列是升序排序, r[i] < stop,当step为负整数时产生的序列是降序排序, r[i] >stop。

    2.说明

    1)如果第一个元素 不符合stop值对序列的限制条件,则该 range 对象为空;

    2)range 对象支持索引访问,也支持负索引,支持负索引时会将其解读为从正索引所确定的序列的末尾开始索引,这个与序列访问方法一样;

    3)range 对象支持切片访问,但与索引访问方式不一样,切片访问返回的还是一个range对象,假设:切片的开始位置索引为s,结束位置为e,当step为正数时则返回的range对象为:

    range(start+s*step,max(stop,start+e*step),step)

    如果step为负数,则返回的range对象为:

    range(start+s*step,min(stop,start+e*step),step)

    4)range 类型相比常规 list 或 tuple 的优势在于一个 range 对象总是占用固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保存了 start, stop 和 step 值,并会根据需要计算具体单项或子范围的值),某种程度上与生成器表达式类似,但它不属于生成器,也不是迭代器。

    5)使用 == 和 != 检测 range 对象是否相等是将其作为序列来比较。 也就是说,如果两个 range 对象表示相同的值序列就认为它们是相等的。 (请注意比较结果相等的两个 range 对象可能会具有不同的 start, stop 和 step 属性,例如 range(0) == range(2, 1, 3) 而 range(0, 3, 2) == range(0, 4, 2)。)

    6)注意:在Python3以前有个xrange函数,Python3以后取消了,其功能合并到了range

    三、zip函数

    1.语法:zip(*iterables)

    1)参数说明:iterables表示多个可迭代对象,可以没有;

    2)返回值为一个zip对象,这个对象也是一个迭代器,该迭代器中的元素是元组,元组的元素i按参数顺序来自于这多个可迭代对象的第i个元素。当所输入可迭代参数对象中最短的一个被耗尽时,迭代器将停止迭代。 当只有一个可迭代对象参数时,它将返回一个单元组的迭代器。 不带参数时,它将返回一个空迭代器。

    2.说明:

    1)返回对象可以转换为列表、字典等类型,但转换为字典类型时,zip必须且只能有2个迭代对象作为参数;

    2)zip对象是个迭代器,因此遍历一次后元素会清空;

    3)要查看其内容,可使用list或dict将其转换为列表

    3.举例:按顺序执行下列脚本

    numbers=[1,2,3,4,5,6]
    ABC=['A','B','C']
    abc='abc'
    z=zip(numbers,ABC,abc)

    list(z) #输出为:

    [(1, 'A', 'a'), (2, 'B', 'b'), (3, 'C', 'c')]

    z=zip(numbers,ABC,abc) #思考一下,为什么要再次zip?

    dict(z) #执行报错,因为使用了3个迭代对象不能创建字典数据

    list(z) #输出为:

    [(2, 'B', 'b'), (3, 'C', 'c')]

    思考一下为什么比上面少了一个?

    z=zip(numbers,ABC,abc)?

    for n,A,a in z:print(n,A,a,end='; ') #输出为:

    1 A a; 2 B b; 3 C c;

    四、reversed函数

    1.语法:reversed(seq)

    2.说明:

    1)返回一个与参数对象顺序倒转的 iterator对象,原参数对象保持不变,返回对象类型为reversed,是一个可迭代对象,不能直接访问,可以转换为其他对象或通过for循环方法访问

    2)seq 为任何序列或可迭代的对象,必须是一个具有 __reversed__() 方法的对象或者是支持序列协议的对象(支持__len__() 方法和 从0开始的整数类型参数的__getitem__() 方法)

    3.举例:

    s="AbcD"
    s2=reversed(s)

    type(s2)#输出:

    <class 'reversed'>

    list(s2) #输出:

    ['D', 'c', 'b', 'A']

    s保持不变

    s2 #输出:

    <reversed object at 0x000000000371B1D0>

    五、sorted函数

    1.语法:

    sorted(iterable, *, key=None, reverse=False)

    2.说明:

    1)根据 iterable 中的项返回一个新的已排序列表,返回值为已排序的列表,原参数iterable 中的数据不会发生变化;

    2)key 指定带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键 (例如 key=str.lower)。 默认值为 None (直接比较元素)

    3)reverse 为一个布尔值。 如果设为 True,则每个列表元素将按反向顺序比较进行排序

    3.举例

    s="AbcD"

    s1=sorted(s) #s1的数据为:

    ['A', 'D', 'b', 'c']

    s2=sorted(s,key=str.lower) #s2的数据为:

    ['A', 'b', 'c', 'D']
    专题推荐:迭代
    上一篇:细说python3中sort和sorted 下一篇:被Python3抛弃的那些函数

    相关文章推荐

    • Python如何按PEP8风格自动排版代码• 详解Python函数中参数带星号是什么意思• 细说python3中sort和sorted

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网