探索Python的乐趣:12个实用迭代器与生成器示例

图片[1]-探索Python的乐趣:12个实用迭代器与生成器示例-山海云端论坛

今天,让我们一起揭秘那些既让代码变得更简洁高效,又能领略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
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容