python 生成器 例题
时间: 2023-08-20 12:02:06 浏览: 171
生成器是一种特殊的函数,它使用了yield关键字来返回一个值,并且可以暂停和继续执行。生成器能够有效地节省内存,并且可以在遍历过程中生成数据,而不是一次性生成所有数据。
下面是一个例题,使用Python生成器来生成斐波那契数列:
```python
def fibonacci_generator():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# 使用生成器生成斐波那契数列的前十个数
fib_gen = fibonacci_generator()
fibonacci_list = [next(fib_gen) for _ in range(10)]
print(fibonacci_list)
```
在上面的例子中,`fibonacci_generator`是一个生成器函数,通过`yield`语句返回斐波那契数列的每一个数。通过将其赋值给`fib_gen`,我们创建了一个生成器对象。
然后,我们使用列表推导式来遍历生成器对象,每次通过`next`函数调用生成器来获取下一个数,并将其添加到`fibonacci_list`中。
最终,我们打印出来前十个斐波那契数列的结果。
通过生成器,我们可以按需生成无限序列,而不必占用额外的内存。这对于处理大量数据或者进行延迟计算非常有用。同时,使用生成器能够以更简洁、可读性更高的方式编写代码。
相关问题
python循环结构例题
Python中的循环结构是一种重要的编程技巧,在实际的程序开发中经常用到。Python提供了两种主要的循环结构:for循环和while循环。
其中for循环主要用于遍历序列(字符串、元组、列表等)或其他可迭代对象。例如,我们可以使用for循环来打印一个列表中的所有元素:
```
num_list = [1, 2, 3, 4, 5]
for num in num_list:
print(num)
```
在这个例子中,我们定义了一个列表num_list,然后使用for循环遍历这个列表中的所有元素,并将它们打印出来。这个代码片段的输出结果将是:
```
1
2
3
4
5
```
另一方面,while循环通常用于在条件为真时重复执行一段代码。例如,我们可以使用while循环来计算1到10的整数的和:
```
i = 1
sum = 0
while i <= 10:
sum += i
i += 1
print(sum)
```
在这个例子中,我们使用while循环来计算1到10的整数的和。我们首先定义了一个循环计数器i和一个变量sum,然后在while循环中使用它们来逐步计算整数的总和。直到i的值大于10,循环才会结束。这个代码片段的输出结果将是:
```
55
```
除了for循环和while循环之外,Python还提供了一些其他的循环结构,如迭代器,生成器等。熟练掌握这些循环结构,并在实际编程中灵活运用,将有利于提高编写高效、可维护的Python程序的能力。
概率论例题python
### 使用Python编写概率论例题
#### 计算二项分布的概率质量函数
为了计算给定参数下的二项分布概率,可以利用`scipy.stats.binom.pmf()`方法来求解特定事件发生的概率。
```python
from scipy.stats import binom
n = 10 # number of trials
p = 0.5 # probability of success on each trial
k = range(0, n+1) # possible outcomes
probabilities = binom.pmf(k, n, p)
for outcome, prob in zip(k, probabilities):
print(f'P(X={outcome}) = {prob:.4f}')
```
此代码片段展示了如何计算当试验次数为10次、每次成功的概率为0.5时不同成功数目的概率[^1]。
#### 随机变量模拟——泊松过程
对于随机点过程的兴趣可以通过研究泊松过程得到满足。下面的例子说明了怎样创建一个简单的泊松过程仿真器,在指定的时间间隔内生成到达时间戳记。
```python
import numpy as np
def poisson_process(lamda, T):
event_times = []
current_time = 0
while True:
inter_event_interval = np.random.exponential(scale=1/lamda)
if current_time + inter_event_interval > T:
break
else:
current_time += inter_event_interval
event_times.append(current_time)
return event_times
lamda = 2.0 # average rate per unit time
T = 10 # total observation period length
event_timestamps = poisson_process(lamda, T)
print(event_timestamps)
```
这段程序实现了泊松过程中事件发生时刻的抽样,并打印出了这些时刻列表[^2]。
#### 贝叶斯推断入门实例
贝叶斯统计提供了一种更新先验信念的方法,即根据新数据调整假设的概率。这里给出的是关于硬币投掷实验的一个简单例子:
```python
from scipy.stats import beta
prior_alpha = 2
prior_beta = 2
data_heads = 8
data_tails = 4
posterior_alpha = prior_alpha + data_heads
posterior_beta = prior_beta + data_tails
x_values = np.linspace(0, 1, 1000)
y_prior = beta.pdf(x=x_values, a=prior_alpha, b=prior_beta)
y_posterior = beta.pdf(x=x_values, a=posterior_alpha, b=posterior_beta)
plt.plot(x_values, y_prior, label='Prior')
plt.plot(x_values, y_posterior, label='Posterior', linestyle='dashed')
plt.legend()
plt.show()
```
上述脚本绘制了一个Beta分布作为先验以及观察到一些正面朝上的结果之后所获得的事后分布图象.
阅读全文