本文目录导读:

我来给你详细讲解Python集合的多种遍历方法,包含具体案例。
基础for循环遍历
# 创建示例集合
fruits = {'apple', 'banana', 'orange', 'grape', 'mango'}
# 基础遍历
print("基础遍历:")
for fruit in fruits:
print(fruit)
# 输出(顺序不确定,因为集合无序):
# banana
# orange
# mango
# grape
# apple
带索引的遍历(使用enumerate)
colors = {'red', 'blue', 'green', 'yellow'}
# 使用enumerate获取索引和值
print("带索引遍历:")
for index, color in enumerate(colors):
print(f"索引 {index}: {color}")
# 输出示例(顺序随机):
# 索引 0: blue
# 索引 1: green
# 索引 2: red
# 索引 3: yellow
使用while循环遍历
# 先将集合转为列表,因为集合不支持索引访问
numbers = {1, 2, 3, 4, 5}
num_list = list(numbers)
i = 0
print("while循环遍历:")
while i < len(num_list):
print(f"第{i+1}个元素: {num_list[i]}")
i += 1
条件筛选遍历
# 遍历并筛选特定元素
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
print("筛选偶数:")
even_numbers = [num for num in numbers if num % 2 == 0]
for num in even_numbers:
print(num)
嵌套集合遍历
# 集合中包含元组
students = {('Tom', 18), ('Jerry', 19), ('Alice', 20), ('Bob', 17)}
print("遍历包含元组的集合:")
for name, age in students:
print(f"姓名: {name}, 年龄: {age}")
# 或者使用索引
for student in students:
print(f"学生: {student[0]}, 年龄: {student[1]}")
多集合并行遍历
set1 = {'a', 'b', 'c'}
set2 = {1, 2, 3}
# 使用zip并行遍历
print("并行遍历两个集合:")
for char, num in zip(set1, set2):
print(f"{char} - {num}")
# 使用enumerate和zip组合
print("\n带索引的并行遍历:")
for i, (char, num) in enumerate(zip(set1, set2)):
print(f"位置{i}: {char} - {num}")
实际应用案例
案例1:去除重复并处理数据
# 处理用户输入的用户名
usernames = ['alice', 'bob', 'alice', 'charlie', 'bob', 'david']
unique_users = set(usernames)
print("唯一用户处理:")
for user in unique_users:
# 处理每个用户
processed_name = user.capitalize()
print(f"处理后的用户名: {processed_name}")
案例2:集合运算与遍历
# 学生选课系统
course_a = {'Alice', 'Bob', 'Charlie', 'David'}
course_b = {'Bob', 'David', 'Eve', 'Frank'}
print("A班学生:")
for student in course_a:
print(f" - {student}")
print("\n两班都选的学生:")
both = course_a & course_b # 交集
for student in both:
print(f" - {student}")
print("\n只选A班的学生:")
only_a = course_a - course_b # 差集
for student in only_a:
print(f" - {student}")
高级技巧
使用生成器表达式
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
# 使用生成器高效遍历
squared_gen = (x**2 for x in numbers)
print("平方值(生成器):")
for value in squared_gen:
print(value, end=' ')
条件过滤与处理
# 复杂条件处理
data = {15, 23, 45, 67, 89, 12, 34, 56, 78}
print("处理数据:")
for num in data:
if num > 50:
result = "大数"
elif num > 20:
result = "中数"
else:
result = "小数"
print(f"{num}: {result}")
性能优化建议
import time
# 大数据集遍历优化
big_set = set(range(1000000))
# 不好的做法:多次转换
start = time.time()
for item in list(big_set): # 不必要地创建列表
pass
print(f"列表转换遍历耗时: {time.time() - start}")
# 好的做法:直接遍历
start = time.time()
for item in big_set: # 直接遍历集合
pass
print(f"直接遍历耗时: {time.time() - start}")
常见错误处理
# 遍历时修改集合的错误
numbers = {1, 2, 3, 4, 5}
# 错误方式:遍历时直接修改
try:
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # 会导致RuntimeError
except RuntimeError as e:
print(f"错误: {e}")
# 正确方式:创建副本
print("正确方式(创建副本):")
for num in numbers.copy():
if num % 2 == 0:
numbers.remove(num)
print(f"修改后: {numbers}")
这些案例涵盖了Python集合遍历的常见场景,集合是无序的,如果需要有序遍历,建议使用list(sorted(set))或collections.OrderedSet。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播