python3中嵌套for循环:生成两个for循环的输出
我有这个密码python3中嵌套for循环:生成两个for循环的输出,python,python-3.x,loops,for-loop,nested-loops,Python,Python 3.x,Loops,For Loop,Nested Loops,我有这个密码 import numpy as np import pandas as pd from scipy.spatial import distance mn= [(252, 468), (252, 495), (274, 481), (280, 458), (298, 479), (301, 458), (324, 499)] name=['loc1','loc2','loc3','loc4','loc5','lco6','loc7'] zz= [(329, 478), (336,
import numpy as np
import pandas as pd
from scipy.spatial import distance
mn= [(252, 468), (252, 495), (274, 481), (280, 458), (298, 479), (301, 458), (324, 499)]
name=['loc1','loc2','loc3','loc4','loc5','lco6','loc7']
zz= [(329, 478), (336, 455), (346, 499), (352, 478), (374, 468), (381, 499), (395, 459), (406, 488)]
L = pd.Series()
for name, i in list(zip(name, mn)):
for e in zz:
L[name] = distance.euclidean(e, i)
print(L)
w=100
dd = np.sqrt(np.power(L, 2) + np.power(w, 2))
print(dd)
以下是它作为L&dd输出的内容:
loc1 155.293271
loc2 154.159009
loc3 132.185476
loc4 129.522199
loc5 108.374351
lco6 109.201648
loc7 82.734515
dtype: float64
loc1 184.705170
loc2 183.752551
loc3 165.749811
loc4 163.633737
loc5 147.461859
lco6 148.070929
loc7 129.788289
我的麻烦是,它只为zz中的一个点提供了L&dd,但我希望为zz中的每个点提供L,然后能够使用它为L中的每个值获得dd
谢谢你的帮助 你就快到了。基本上,您可以用以下内容替换for循环:
L = pd.Series()
for name, i in list(zip(name, mn)):
j = [] # save the intermediary results here
for e in zz:
j.append(distance.euclidean(e, i))
L[name] = j # append at once all computations are done
这将为您提供如下信息:
loc1 [77.64663547121665, 85.0, 98.97979591815695, 1...
loc2 [78.85429601486528, 93.03762679690406, 94.0850...
loc3 [55.08175741568164, 67.23094525588644, 74.2159...
loc4 [52.92447448959697, 56.08029957123981, 77.6981...
loc5 [31.016124838541646, 44.94441010848846, 52.0, ...
lco6 [34.40930106817051, 35.12833614050059, 60.8769...
loc7 [21.587033144922902, 45.60701700396552, 22.0, ...
下一步,您可以使用。应用功能:
op = (L
.apply(lambda x: np.sqrt(np.power(x, 2) + np.power(w, 2)))
.apply(lambda x: x[0])) # get the first value of each array
loc1 126.605687
loc2 127.349912
loc3 114.166545
loc4 113.141504
loc5 104.699570
lco6 105.754433
loc7 102.303470
dtype: float64
你就快到了。基本上,您可以用以下内容替换for循环:
L = pd.Series()
for name, i in list(zip(name, mn)):
j = [] # save the intermediary results here
for e in zz:
j.append(distance.euclidean(e, i))
L[name] = j # append at once all computations are done
这将为您提供如下信息:
loc1 [77.64663547121665, 85.0, 98.97979591815695, 1...
loc2 [78.85429601486528, 93.03762679690406, 94.0850...
loc3 [55.08175741568164, 67.23094525588644, 74.2159...
loc4 [52.92447448959697, 56.08029957123981, 77.6981...
loc5 [31.016124838541646, 44.94441010848846, 52.0, ...
lco6 [34.40930106817051, 35.12833614050059, 60.8769...
loc7 [21.587033144922902, 45.60701700396552, 22.0, ...
下一步,您可以使用。应用功能:
op = (L
.apply(lambda x: np.sqrt(np.power(x, 2) + np.power(w, 2)))
.apply(lambda x: x[0])) # get the first value of each array
loc1 126.605687
loc2 127.349912
loc3 114.166545
loc4 113.141504
loc5 104.699570
lco6 105.754433
loc7 102.303470
dtype: float64
谢谢:)对于下一个操作,我是这样做的:对于L:o.append(np.sqrt(np.power(row,2)+np.power(w,2)),dd=o它给出了[array([126.60568708131.24404748,…]),array([127.34991166,136.58696863,…]))那么,有办法调用dd的第一列吗?谢谢!我这样做了,但我还是一个新成员,我应该达到15才能标记它。他们注册我的标记,直到我达到15。谢谢:)对于下一个操作,我这样做了o=[]对于L:o.append(np.sqrt(np.power(row,2)+np.power(w,2)),dd=o它给出了[array]([126.60568708131.24404748,…])、数组([127.34991166,136.58696863,…])那么,有办法调用dd的第一列吗?谢谢!我这样做了,但我仍然是一名新成员,我应该达到15岁才能标记。他们会注册我的标记,直到我达到15岁