Python求任意奇数个整数的中间值
时间: 2023-05-25 15:07:03 浏览: 70
方法一:
将所有整数排序,取中间的那个数。
代码:
``` python
def find_median(lst):
lst.sort()
return lst[len(lst)//2]
lst = [1, 4, 3, 6, 7, 5, 2, 9, 8]
print(find_median(lst)) # 输出 5
```
方法二:
使用快速选择算法,在O(n)时间内寻找列表中的中位数。
代码:
``` python
import random
def find_median(lst):
n = len(lst)
mid = n // 2
if n % 2 == 1:
return quick_select(lst, mid)
else:
return 0.5 * (quick_select(lst, mid - 1) + quick_select(lst, mid))
def quick_select(lst, k):
pivot = random.choice(lst)
left = [x for x in lst if x < pivot]
right = [x for x in lst if x > pivot]
mid = [x for x in lst if x == pivot]
if k < len(left):
return quick_select(left, k)
elif k < len(left) + len(mid):
return mid[0]
else:
return quick_select(right, k - len(left) - len(mid))
lst = [1, 4, 3, 6, 7, 5, 2, 9, 8, 11, 12, 13]
print(find_median(lst)) # 输出 6.5
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)