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()函数——通过指定条件过滤序列
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()函数——通过函数实现对可迭代对象的操作
六、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()——对可迭代对象进行排序
十、zip()——将可迭代对象打包成元组
以上是关于Python 常用迭代函数总结的主要内容,如果未能解决你的问题,请参考以下文章