Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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_List_For Loop_If Statement - Fatal编程技术网

在python中,如何读取运行在列表所有元素上的索引?

在python中,如何读取运行在列表所有元素上的索引?,python,list,for-loop,if-statement,Python,List,For Loop,If Statement,我这里有一个基本问题。我想生成随机位置,它们之间的距离最小。尽管如此,我所获得的最多的是一个位置列表,其中元素“n”的距离大于元素“n-1”,但它并不关心之前的所有“n-2,3,4,…”元素。这是我目前的代码: sample = input('How many elements do you want?') X = np.linspace(200,1900) Y = np.linspace(200,1900) Xin = np.random.choice(X,1) Yin = np.rando

我这里有一个基本问题。我想生成随机位置,它们之间的距离最小。尽管如此,我所获得的最多的是一个位置列表,其中元素“n”的距离大于元素“n-1”,但它并不关心之前的所有“n-2,3,4,…”元素。这是我目前的代码:

sample = input('How many elements do you want?')
X = np.linspace(200,1900) 
Y = np.linspace(200,1900)
Xin = np.random.choice(X,1)
Yin = np.random.choice(Y,1)
dmin = 1000
i = 1
a = [ ]
Xprev = [Xin]
Yprev = [Yin]
while (i<sample+1):
    Xal = np.random.choice(X,1) 
    Yal = np.random.choice(Y,1)
    if sqrt((Xal-Xprev[i-1])**2+(Yal-Yprev[i-1]**2) > dmin:
        Xfin = Xal
        Yfin = Yal
        Xprev.append(Xfin)
        Yprev.append(Yfin)
        a_s = zip(Xfin,Yfin)
        a.append(a_s)
        out = vstack(a)
        i = i+1
    else:

        i=i
sample=input('需要多少元素?'))
X=np.linspace(2001900)
Y=np.linspace(2001900)
Xin=np.随机选择(X,1)
Yin=np.随机选择(Y,1)
dmin=1000
i=1
a=[]
Xprev=[Xin]
Yprev=[Yin]
而(i)dmin:
Xfin=Xal
Yfin=Yal
Xprev.append(Xfin)
Yprev.append(Yfin)
a_s=zip(Xfin,Yfin)
a、 附加(a_s)
out=vstack(a)
i=i+1
其他:
i=i

我想我需要的是在if语句中更改Xprev的索引,该索引运行在X,Yprev列表的所有和每个元素上。您能解释一下如何做到这一点吗?提前感谢!

您的问题看起来与此非常相似:

实现这一点的简单方法是迭代从
0
i-1
的索引,并检查条件是否适用于所有索引

if all((Xal-Xprev[j])**2+(Yal-Yprev[j]**2) > dmin for j in xrange(i)):
    ...
或者,您可以使用numpy数组来更清晰地表达这一点

dmin2 = dmin**2  # Compute square of minimum distance
points = np.zeros((sample, 2))
points[0] = np.random.choice(X), np.random.choice(Y)
i = 1
while i < sample:
    # Get a trial point
    point = np.array((np.random.choice(X), np.random.choice(Y)))

    # Check minimum distance to existing points
    if np.min(np.sum(np.square(points[:i] - point), 1)) > dmin2:
        points[i] = point
        i += 1
dmin2=dmin**2#计算最小距离的平方
点=np.零((样本,2))
点[0]=np.random.choice(X),np.random.choice(Y)
i=1
而我<样本:
#得到一个测试点
point=np.array((np.random.choice(X),np.random.choice(Y)))
#检查到现有点的最小距离
如果np.min(np.sum(np.square(点[:i]-点),1))>dmin2:
点[i]=点
i+=1

Ohh,我明白了。太好了!非常感谢!我对第一个选项仍然有问题,但是,使用你的第二个想法,一切都变得更好了!@Enrique我刚刚注意到代码中有一个小错误——你需要对
dmin进行平方运算,因为比较的左侧是计算距离的平方。这比t更有效每次计算平方根。