Python随机生成数的方法是什么
时间: 2024-05-03 07:22:56 浏览: 106
在Python中,可以使用random模块中的函数生成随机数。以下是生成随机数的一些常用方法:
1. randint(a, b):生成一个[a, b]之间的整数。
2. uniform(a, b):生成一个[a, b]之间的浮点数。
3. random():生成一个[0, 1)之间的浮点数。
4. choice(seq):从序列中随机选择一个元素。
5. shuffle(seq):将序列中的元素随机打乱。
6. sample(seq, k):从序列中随机选择k个元素,返回一个新的列表。
示例代码:
```python
import random
# 生成一个[1, 100]之间的整数
num = random.randint(1, 100)
print(num)
# 生成一个[0, 1)之间的浮点数
num = random.random()
print(num)
# 从序列中随机选择一个元素
fruit = random.choice(['apple', 'banana', 'orange'])
print(fruit)
# 将序列中的元素随机打乱
seq = [1, 2, 3, 4, 5]
random.shuffle(seq)
print(seq)
# 从序列中随机选择3个元素,返回一个新的列表
seq = [1, 2, 3, 4, 5]
new_seq = random.sample(seq, 3)
print(new_seq)
```
相关问题
Python 结构体随机生成树
生成随机树的常用算法是Prim算法和Kruskal算法,它们都可以用来生成带权的树,也可以用来生成无权的树。这里以Prim算法为例,介绍如何在Python中生成随机无权树的代码:
```python
import random
# 定义节点类
class Node:
def __init__(self, val):
self.val = val
self.neighbours = []
# 定义生成随机树的函数
def generate_random_tree(n):
nodes = [Node(i) for i in range(n)] # 创建节点列表
root = nodes[0] # 随机选取一个节点作为根节点
visited = {root} # 标记已经访问的节点
unvisited = set(nodes[1:]) # 未访问的节点集合
while unvisited:
# 随机选择一个已经访问的节点和一个未访问的节点
v = random.choice(list(visited))
u = random.choice(list(unvisited))
# 将u加入到v的邻居列表中,并标记u已经访问
v.neighbours.append(u)
visited.add(u)
unvisited.remove(u)
return root
# 测试代码
if __name__ == '__main__':
root = generate_random_tree(10)
print(root.val)
print([node.val for node in root.neighbours])
```
这段代码中,我们首先定义了一个节点类,每个节点有一个值和一个邻居列表。然后定义了一个生成随机树的函数,函数的输入是节点个数n,输出是随机生成的树的根节点。在函数中,我们首先创建节点列表,然后随机选取一个节点作为根节点,并将其标记为已经访问。然后我们维护两个集合,一个是已经访问的节点集合visited,一个是未访问的节点集合unvisited。在每一次循环中,我们随机选择一个已经访问的节点v和一个未访问的节点u,将u加入到v的邻居列表中,并将u标记为已经访问。最后返回根节点即可。
以上代码仅给出了一个简单的无权树的生成算法,如果需要生成带权树,可以在每次选择未访问节点时,随机赋予一个权值。
随机生成树RRT python
### 使用Python实现RRT算法
随机快速探索随机树 (Randomized Rapidly-exploring Random Tree, RRT) 是一种用于路径规划的有效方法,在机器人学等领域有广泛应用。下面是一个简单的基于Python的RRT算法实现。
#### 初始化环境和节点类定义
为了构建RRT,首先需要定义表示空间中的节点以及初始化环境参数:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import KDTree
class Node:
def __init__(self, x, y):
self.x = x
self.y = y
self.path_x = []
self.path_y = []
self.parent = None
```
此部分代码创建了一个`Node`类来存储坐标位置及其父节点信息[^1]。
#### 主要函数:生成RRT并寻找最短路径
接下来是核心逻辑——通过迭代过程逐步扩展树木直到找到目标点附近的解为止:
```python
def rrt(start=[0, 0], goal=[6, 10], obstacle_list=[], expand_dis=1,
path_resolution=0.5, max_iter=500):
start_node = Node(start[0], start[1])
end_node = Node(goal[0], goal[1])
node_list = [start_node]
for i in range(max_iter):
rnd_node = generate_random_node(obstacle_list)
nearest_ind = KDTree([(node.x, node.y) for node in node_list]).query((rnd_node.x, rnd_node.y))[1]
nearest_node = node_list[nearest_ind]
new_node = steer(nearest_node, rnd_node, expand_dis)[^2]
if check_collision(new_node, obstacle_list):
near_indices = find_near_nodes(node_list, new_node)
connect_tree(node_list, new_node, near_indices)
if calculate_dist_to_goal(new_node.x, new_node.y) <= expand_dis:
final_course = get_final_course(len(node_list) - 1, goal, node_list)
return final_course
return None
```
这段程序实现了完整的RRT流程,包括随机采样、最近邻居查询、新节点生成与连接操作等主要步骤[^3]。
#### 辅助功能模块
除了上述两个关键组件外,还需要一些辅助性的子程序来进行碰撞检测、距离计算等工作:
```python
def is_collision_free(point, obstacles):
"""判断给定点是否位于障碍物内部"""
...
def get_nearest_node_index(nodes, point):
"""获取离指定点最近的一个节点索引"""
...
def calc_distance_and_angle(from_node, to_node):
"""返回两点间欧氏距离及方向角"""
dx = to_node.x - from_node.x
dy = to_node.y - from_node.y
d = math.sqrt(dx ** 2 + dy ** 2)
theta = math.atan2(dy, dx)
return d, theta
...
```
这些帮助器函数提供了必要的工具支持整个算法框架正常运作[^4]。
阅读全文