Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数组被接受的值填充之前继续循环的干净方法?_Python_Loops - Fatal编程技术网

Python 在数组被接受的值填充之前继续循环的干净方法?

Python 在数组被接受的值填充之前继续循环的干净方法?,python,loops,Python,Loops,我想不出如何给这个问题贴上标签 我需要生成一些随机的3D点,这些点的组件值在原点周围的某个范围内,但是没有点在原点周围的某个半径内 从视觉上看,这相当于原点周围的一个空球体。我是通过以下方式做到这一点的: for Food in xrange(100): food_array[Food] = 20*np.random.uniform(-1,1,3) if mag(food_array[Food]) < 4: del food_array[Food] xra

我想不出如何给这个问题贴上标签

我需要生成一些随机的3D点,这些点的组件值在原点周围的某个范围内,但是没有点在原点周围的某个半径内

从视觉上看,这相当于原点周围的一个空球体。我是通过以下方式做到这一点的:

for Food in xrange(100):
    food_array[Food] = 20*np.random.uniform(-1,1,3)
    if mag(food_array[Food]) < 4:
        del food_array[Food]
xrange(100)食品的
:
食物数组[food]=20*np.随机均匀(-1,1,3)
如果mag(食物数组[食物])小于4:
del food_数组[食物]
mag()计算距原点的距离,如果该距离小于4,则删除该元素。这很好,但我的问题是,什么是一种干净的方法,可以让循环继续,直到食物数组有100个食物

我需要它总是以相同数量的点结束,但是很明显,如果我删除其中的一些点,我需要它继续运行,直到数组有100个点。我可以想出至少四种不同的方法来做到这一点,但我讨厌所有的方法

请给我一个优雅的解决方案。

food\u array=[]
food_array = []
while len(food_array) < 100:
    item = 20*np.random.uniform(-1,1,3)
    if mag(item) >= 4:
        food_array.append(item)
而len(食物数组)<100: 项目=20*np.随机均匀(-1,1,3) 如果mag(项目)>=4: 食物数组。追加(项)
一种方法是避免在获得好的分数之前添加分数

for Food in xrange(100):
    while True:
        point = 20*np.random.uniform(-1,1,3)
        if mag(point) >= 4:
            break
    food_array[Food] = point
我可能会从中提取一种方法,使逻辑更加清晰,并允许您使用列表理解

def generate_point(min_radius):
    while True:
        point = 20*np.random.uniform(-1,1,3)
        if mag(point) >= min_radius:
            return point

food_array = [generate_point(min_radius=4) for i in xrange(100)]

while循环有什么问题?