使用迭代器实现:给定一个列表,列表中是10个班级学生的姓名,使用迭代器获取随机5个人的姓名(不重复),以元组的形式输出
时间: 2024-02-26 10:58:51 浏览: 97
c代码-从键盘任意输入五个学生的姓名,编程找出并输出按字典顺序排在最前面的学生姓名。
可以使用 Python 标准库中的 `random.sample()` 函数来获取列表中的随机元素,返回的结果是一个列表。然后使用迭代器将这个列表中的元素逐个返回。
下面是使用迭代器实现随机获取列表中元素的代码:
```python
import random
class RandomIterator:
def __init__(self, data, num):
self.data = random.sample(data, num)
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
result = self.data[self.index]
self.index += 1
return result
names = ['Alice', 'Bob', 'Cathy', 'David', 'Eva', 'Frank', 'Grace', 'Helen', 'Iris', 'Jack']
rand_names = RandomIterator(names, 5)
print(tuple(rand_names))
```
解释一下代码:
- `RandomIterator` 类是一个迭代器类,它接受两个参数:一个是数据列表 `data`,一个是要获取的元素个数 `num`。
- 在 `__init__()` 方法中,使用 `random.sample()` 函数从 `data` 列表中获取 `num` 个随机元素,并保存在 `self.data` 中。
- `__iter__()` 方法返回迭代器对象本身。
- `__next__()` 方法逐个返回 `self.data` 列表中的元素,直到返回了 `num` 个元素为止。
- 在主程序中,首先创建了一个名为 `names` 的列表,包含了 10 个班级学生的姓名。然后使用 `RandomIterator` 类创建了一个名为 `rand_names` 的迭代器,获取了 5 个随机姓名。最后使用 `tuple()` 函数将迭代器中的元素转换为元组并输出。
运行程序,可以得到输出结果:
```
('Eva', 'Cathy', 'Iris', 'Grace', 'Frank')
```
这里输出的是一个包含 5 个随机姓名的元组,每次运行程序输出的结果都可能不同。
阅读全文