Python 常用迭代函数总结

Posted Amo Xiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 常用迭代函数总结相关的知识,希望对你有一定的参考价值。

一、all()函数——判断可迭代对象是否包括假值

all() 函数 用于判断可迭代对象是否包括假值即0、空、False,除此之外都属于真值。如果包括一个假值结果就为 False,否则结果就为 True。all() 函数 的语法格式如下:

all(iterable)
# 参数说明:
# 1.iterable:可迭代对象,如列表、元组等。
# 2.返回值:返回值为True或False,如果可迭代对象不包括空、0、False、None等的元素,那么返回值为True,否则返回值为False。

示例1:

print(all([1, 3, 5, 7, 9]))  # 列表元素都不为空、0、False,返回True
print(all(('Python', 'Java')))  # 元组元素都不为空、0、False,返回True
print(all([0, 2, 4, 6, 8]))  # 列表元素中存在一个为0的元素,返回False
print(all(['a', 'b', 'c', '']))  # 列表元素中存在一个为空的元素,返回False
print(all([None, "hello", "Amo"]))  # False
print(all([[], "xxx", "ppp"]))  # False

# 注意:如果可迭代对象中元素个数为0,则返回值为True,例如空列表、空元组、空字典的返回值为True
print(all([]))  # 空列表,返回True
print(all(()))  # 空元组,返回True
print(all())  # 空字典,返回True

# 将提示TypeError: all() takes exactly one argument(0 given)
try:
    # print(all())  # 参数不能为空 all() takes exactly one argument (0 given)
    print(all(2))  # 参数必须为可迭代对象 'int' object is not iterable
except TypeError as e:
    print(e)

示例2:判断列表中是否包括0。代码如下:

import random  # 导入随机数模块
while True:
    a = [random.randint(0, 5) for _ in range(5)]  # 生成0-5之间的随机数列表
    if not all(a):
        print(a)
        break
    else:
        print('随机数列表中没有0,程序重新执行!')

二、any()函数——判断可迭代对象是否全为假值

any() 函数 用于判断可迭代对象元素是否都是假值即 0、空、False。如果全部为假值则返回 False,否则返回 True。any() 函数 的语法格式如下:

any(iterable)
# 1.参数说明:
# 2.iterable:可迭代对象,如列表、元组等。
# 3.返回值:返回值为True或False,如果可迭代对象中只要有一个元素不是假值,则返回值为True,
# 如果可迭代对象中所有的元素都是假值,则返回值为False。

示例1:使用any()函数判断可迭代对象是否全为假值。代码如下:

a1 = any(['python', 'java', 'c++', '.net', ' '])
a2 = any([0, 1, 2, 3, 4, 5])  # 有一个元素为True,则返回True
a3 = any([0, '', False])  # 全部元素为False,则返回False
a4 = any((0, 0))
a5 = any([])  # 可迭代对象为空(元素个数为0),返回False
# 输出判断结果
print('第一个序列:', a1)  # True
print('第二个序列:', a2)  # True
print('第三个序列:', a3)  # False
print('第四个序列:', a4)  # False
print('第五个序列:', a5)  # False

# 注意:如果可迭代对象为空(元素个数为0),返回值为False,如空列表、空元组返回值为False。
# 同样的any()函数参数不能为空且必须为可迭代对象

三、filter()函数——通过指定条件过滤序列

Python 函数 | filter 函数详解

filter() 函数 用于过滤掉可迭代对象中不符合条件的元素,返回由符合条件的元素组成的新的迭代器。filter() 函数 把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定保留还是丢弃该元素。filter() 函数的语法格式如下:

filter(function,iterable)
# 参数说明:
# 1.function:用于实现判断的函数;
# 2.iterable:可迭代对象,如列表、range对象等;
# 3.返回值:返回一个迭代器对象。

示例1:filter()函数的基本应用。

def even_number(num):  # 定义一个判断偶数的函数
    return num % 2 == 0


# 函数也可以使用匿名函数
new_list = filter(even_number, range(100))  # 使用filter()函数过滤出序列中的偶数
print(new_list)  # 返回一个迭代器对象
print(list(new_list))  # 使用list()函数将迭代器转换为列表

示例2:筛选指定范围的数据。

def find(item):  # 创建函数
    total = int(item[1])
    if total >= 600 and total < 700:  # 判断条件
        return True
    return False


list1 = [('小明', 600), ('小刚', 601), ('小雅', 524), ('小旭', 714), ('小章', 624)
    , ('小白', 635), ('小赵', 480), ('小高', 580), ('小王', 541), ('小琪', 680)]
newList = filter(find, list1)  # 过滤序列中不符合条件的元素
list2 = list(newList)  # 使用list()函数转换为列表
print(list2)  # 输出学生列表
print('600分以上:', len(list2), '人')  # 输出人数

示例3:筛选类型不是字符的元素。

a = 'AmoXiang', 123, 12.1, -1
print(set(filter(lambda x: type(x) != str, a)))

示例4:取出字符串中的数字并转换为整型。

a1 = 'ISVO20N2WTRJ4T0XXGQ5QWP9Z'
a2 = filter(str.isdigit, a1)  # 过滤数字
a3 = list(a2)  # 转换为列表
num = ''.join(a3)  # 连接列表
print(int(num))  # 转换为整型输出

四、iter()函数——用于生成迭代器

iter() 函数 用于根据指定的可迭代集合对象或可调用对象来生成一个迭代器。iter() 函数的语法格式如下:

iter(object) # 一个参数形式
iter(object[, sentinel]) # 两个参数形式
# 参数说明:
# 1.object:支持迭代的集合对象;
# 2.sentinel:如果指定参数sentinel,则参数object必须是一个可调用的对象(如函数),
# 此时,iter创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用object;
# 3.返回值:返回一个iterator(迭代器)对象。

示例1: 将序列转换为迭代器对象。

s = iter('Amo')  # 将字符串创建迭代器对象
print(s)
print(next(s))  # 返回迭代器的下一个元素
print(next(s))
print(next(s))
# 根据字典创建迭代器对象
dict = iter(
    'Monday': '星期一', 'Tuesday': '星期二', 'Wednesday': '星期三', 'Thursday': '星期四',
     'Friday': '星期五', 'Saturday': '星期六', 'Sunday ': '星期日')
print(dict)
print(next(dict))  # 返回迭代器的下一个元素,遍历字典中的键(key)
print(next(dict))
print(next(dict))
print(next(dict))
print(next(dict))
print(next(dict))
print(next(dict))

示例2:实现累加计数。

class Add(object):  # 定义类
    def __init__(self, _start, _end):
        self.start = _start
        self.end = _end
    def get_next(self):
        s = self.start
        if (self.start < self.end):
            self.start += 1
        else:
            raise StopIteration
        return s


# 使用iter()函数创建迭代器并实现函数回调以及设置截止次数
a = Add(1, 20)
iterator = iter(a.get_next, 6)
for i in iterator:
    print(i)

五、map()函数——通过函数实现对可迭代对象的操作

Python 函数 | map 函数详解

六、next()函数——返回迭代器的下一个元素

next() 函数 以迭代器为参数,每次调用的时候,返回迭代器中的下一个元素。next() 函数 的语法格式如下:

next(iterator[,default])
# 参数说明:
# 1.iterator:迭代器;
# 2.default:可选参数,用于设置在没有下一个元素时返回该值,如果不设置,
# 又没有下一个元素则会出现停止迭代 StopIteration 的异常。
# 3.返回值:返回迭代器中的下一个元素。

示例1:使用next()函数返回迭代器中的下一个元素。

s = iter('Amo')  # 将字符串序列转为迭代器对象
print(next(s))  # 返回迭代器的下一个元素
print(next(s))
print(next(s))
# print(next(s)) 没有下一个元素,出现停止迭代StopIteration异常
print(next(s, "xiang"))

示例2:循环推进迭代器元素。

list = iter(['a', 'b', 'c', 'd', 'e'])  # 使用iter()函数创建迭代器
while 1:
    try:
        print(next(list))  # 获取下一个值
    except StopIteration:
        print('停止迭代')  # 输出提示
        break  # 退出循环

示例3: 循环推进迭代器元素并设置默认值。

list1 = iter([1, 2, 3, 4, 5])  # 创建可迭代对象
while 1:
    y = next(list1, 0)  # 设置default的值为0
    if y:  # 条件为真,则输出y的值
        print(y)
    else:  # 否则退出循环
        break

七、range()函数——生成器函数

range() 函数 用于生成一个新的 range类型多用于for循环语句中,用于生成指定范围的整数。range() 函数 的语法格式如下:

range(start,end,step)
# 参数说明:
# 1.start:表示起始整数(包含起始整数),默认起始值为0,起始整数可以省略,如果省略则表示从0开始;
# 2.end:表示结束整数(但不包括该值,如range(7)得到的值为0~6,不包括7),结束数值不能省略。
# 当range()函数中只有一个参数时,即表示指定计数的结束值。结束整数可以大于0,
# 也可以小于或等于0,但是结束整数小于或等于0时,生成的range对象是不包含任何元素的;
# step:表示步长,即两个数之间的间隔,参数step可以省略,如果省略则表示步长为1。例如,range(1,7)将得到1、2、3、4、5、6。
# 3.返回值:返回一个range对象。

示例1: 根据提供的参数生成一个range类型。

print(range(15))
print(range(50, 100, 1))
print(range(50, 100, 10))

示例2:使用list()函数将range类型转换为列表。

print(list(range(0)))  # 参数为0,生成的列表不包含任何元素
print(list(range(-88)))  # 参数为负数,生成的列表不包含任何元素
print(list(range(9)))  # 不包括9
print(list(range(5, 15)))  # 不包括15
print(list(range(10, 100, 10)))  # 不包括100,步长为10
print(list(range(10, 101, 5)))  # 包括100,步长为5

示例3:使用range()函数实现数字的累加。

result = 0  # 保存累加结果的变量
for i in range(101):
    result += i  # 实现累加功能
print(result)  # 在循环结束时输出结果

示例4:遍历字符串。

str1 = 'AmoXiang'
for i in range(len(str1)):
    print(str1[i])

示例5:生成指定步长的数值序列。

num1 = range(2, 14, 2)
num2 = range(1, 13, 2)
print('偶数月份:', end=' ')  # 输出偶数月份
for i in num1:
    print(i, end=' ')
print('\\n', end='')  # 换行
print('奇数月份:', end=' ')  # 输出奇数月份
for i in num2:
    print(i, end=' ')

八、reversed()——反转序列对象

reversed() 函数 用于反转一个序列对象,将其元素从后向前颠倒构建成一个新的迭代器,reversed ()函数 的语法格式如下:

reversed(seq)
# 参数说明:
# 1.seq:序列,如列表、元组、字符串或range对象等。
# 2.返回值:返回一个反转的迭代器。

示例1:反转迭代器对象转换为列表后输出。

str1 = reversed('AmoXiang')  # 定义字符串
print(str1)  # 返回一个反转的迭代器
print(list(str1))  # 使用list()函数将可迭代对象转换为列表
list1 = [1001, 888, 999, 666]  # 列表
print(list(reversed(list1)))
num = range(0, 101, 10)  # range对象
print(list(reversed(num)))
tuple = ('Python', 'Java', 'C语言')  # 元组
print(list(reversed(tuple)))

示例2:反转数字列表并排序。

num_list = [100, 85, 56, 59, 75, 77]  # 分数列表
num_list.sort()  # 对分数排序
print(num_list)
print(list(reversed(num_list)))  # 降序输出

示例3:反转英文句子

s = input('请输入英文句子:')
s1 = s.split(' ')  # 按空格切分
l = []
for i in reversed(s1):  # 反转单词
    l.append(i)
my_str = ' '.join(l)
print(my_str)

九、sorted()——对可迭代对象进行排序

Python 函数 | sorted 函数详解

十、zip()——将可迭代对象打包成元组

Python 函数 | zip 函数详解

以上是关于Python 常用迭代函数总结的主要内容,如果未能解决你的问题,请参考以下文章

python中常用内置函数用法总结

Python中生成器,迭代器,以及一些常用的内置函数.

Python3的内置函数

python 迭代器 itertools模块中常用工具函数

吐血整理Python 常用的几种高阶函数和简单的迭代函数

python基础总结