今天,让我们一起揭秘那些既让代码变得更简洁高效,又能领略Python魅力的12个迭代器和生成器实例。别担心,我会用轻松易懂的语言帮你掌握这些小技巧。准备好你的笔记本,我们开始吧!
1.简单迭代器 – enumerate
- enumerate像个小导游,遍历列表并告诉你当前元素的位置索引。
fruits = ['apple', 'banana', 'cherry'] for i, fruit in enumerate(fruits): print(f"{i + 1}. {fruit}")
2.奇妙的无限迭代器 – itertools.count
- count()创建一个永不停歇的计数器,让你可以无限递增。
from itertools import count infinity = count(1) print(next(infinity)) # 输出: 1 print(next(infinity)) # 输出: 2
3.连接迭代器 – itertools.chain
- chain()无缝拼接多个序列,让你像乐高积木一样组合数据。
from itertools import chain list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] combined = chain(list1, list2) for item in combined: print(item)
4.筛选专家 – filter
- filter根据条件过滤序列元素,只保留符合条件的数据。
numbers = [1, 2, 3, 4, 5, 6] even_numbers = filter(lambda x: x % 2 == 0, numbers) for num in even_numbers: print(num)
5.生成器表达式
- 生成器表达式是列表推导式的轻量级版本,更节省内存,按需产生数值。
odd_gen = (x for x in range(10) if x % 2 != 0) for odd in odd_gen: print(odd)
6.动态生成斐波那契数列
- 生成器函数利用生成器特性创建斐波那契数列,只计算你需要的项,避免一次性生成所有值。
def fibonacci(): a, b = 0, 1 while True: yield a a, b = b, a + b fib = fibonacci() for _ in range(10): print(next(fib))
7.按需取子序列 – itertools.islice
- islice抽取部分序列,不改变原序列,适用于处理大型数据集合。
from itertools import islice long_list = [i for i in range(20)] short_list = list(islice(long_list, 5, None, 2)) print(short_list)
8.组合排列大法 – itertools.combinations 和 itertools.permutations
- combinations和permutations快速找出所有可能的组合和排列。
from itertools import combinations, permutations letters = ['A', 'B', 'C'] combos = combinations(letters, 2) perms = permutations(letters, 2) print(list(combos)) # 输出所有组合 print(list(perms)) # 输出所有排列
9.分组高手 – itertools.groupby
- groupby识别和分离序列中规律性分组,为数据分析提供便利。
from itertools import groupby data = ['apple', 'apple', 'banana', 'apple', 'orange', 'banana'] grouped_data = groupby(data) for key, group in grouped_data: print(key, list(group))
10.阶乘生成器
- 使用生成器实现阶乘计算,避免大整数溢出问题,同时代码更加优雅。
def factorial_gen(n): result = 1 for i in range(1, n + 1): result *= i yield result for fact in factorial_gen(5): print(fact)
11.文件行迭代器
- 使用文件迭代器逐行读取文件内容,无需一次性加载整个文件,节省内存。
with open('my_file.txt', 'r') as file: for line in file.readlines(): process_line(line)
12.自定义迭代器类
- 通过定义
__iter__
和__next__
方法,赋予对象迭代能力,实现自定义迭代器。
class CustomIterator: def __init__(self, limit): self.current = 0 self.limit = limit def __iter__(self): return self def __next__(self): if self.current >= self.limit: raise StopIteration else: current_value = self.current self.current += 1 return current_value custom = CustomIterator(5) for value in custom: print(value)
通过这些生动有趣的例子,我们展示了Python迭代器和生成器如何让编程变得更加有趣和实用。下次编写代码时,不妨尝试使用它们,让你的程序更智能和高效吧!
© 版权声明
THE END
暂无评论内容