重命名 python 中的点
Renaming points in python
我有一组新点 i,j,k,l
及其坐标 (1953.2343076828638, 730.0513627132909), (1069.4232335022705, 5882.057343563125),(2212.5767664977293, 3335.942656436875),(4386.765692317136, 1318.948637286709)
。
我正在尝试给这些点起一些名字 s1,s2,s3,s4
。
此外,创建两个单独的列表,一个仅包含点名称 [s1,s2,s3,s4]
,另一个包含点名称及其坐标 [s1:(1953.2343076828638, 730.0513627132909),(1069.4232335022705, 5882.057343563125)...]
我有以下用于创建随机点的代码。
n = 10
#print(n)
#for k in n:
V = []
V=range(n)
#print("vertices",V)
# Create n random points
random.seed()
pos = {i:(random.randint(0,4000),random.randint(0,5000)) for i in V}
#print("pos =", pos)
points = []
positions = []
for i in pos:
points.append(pos[i])
positions.append(i)
positions.append(pos[i])
假设我正在形成一个新列表 L
,其中包含两个现有点 4
和 7
。然后,L = [4,7]
当我在控制台中键入 L[0]
时,它会给我,4
和 pos[L[0]]
会给我它的坐标。
但是考虑到我的新列表 K= [i,j,k,l]
,当我在控制台中键入 K[0]
时,它会给我坐标,但不是它的名称。
我需要将 K
中的这些点添加到与上面定义的 pos
相同的列表中,并使用它们的坐标,但名称不同。有人可以帮我吗?
要按索引访问名称和坐标,请使用元组列表。请注意,您需要明确命名这些。您最好避免此步骤,方法是使用元组列表从头开始存储您的名称坐标对。
要按名称访问,请使用字典。
i, j, k, l = (1953.2343076828638, 730.0513627132909),\
(1069.4232335022705, 5882.057343563125),\
(2212.5767664977293, 3335.942656436875),\
(4386.765692317136, 1318.948637286709)
K = [(name, var) for name, var in zip('ijkl', (i, j, k, l))]
## ACCESS BY INDEX
name_coord = K[0] # ('i', (1953.2343076828638, 730.0513627132909))
name = K[0][0] # 'i'
coord = K[0][1] # (1953.2343076828638, 730.0513627132909)
## ACCESS BY NAME
d = dict(K)
coord = d['i'] # (1953.2343076828638, 730.0513627132909)
根据@jpp 的回答,我会选择名为 namedtuple
的东西。字典通常比元组占用更多 space。
from collections import namedtuple
coord = namedtuple('Coordinate', 'name coord')
i, j, k, l = (1953.2343076828638, 730.0513627132909),\
(1069.4232335022705, 5882.057343563125),\
(2212.5767664977293, 3335.942656436875),\
(4386.765692317136, 1318.948637286709)
K = [coord(name, var) for name, var in zip('ijkl', (i, j, k, l))]
它允许你做:
c = K[0]
print(c.name)
print(c.coord)
我有一组新点 i,j,k,l
及其坐标 (1953.2343076828638, 730.0513627132909), (1069.4232335022705, 5882.057343563125),(2212.5767664977293, 3335.942656436875),(4386.765692317136, 1318.948637286709)
。
我正在尝试给这些点起一些名字 s1,s2,s3,s4
。
此外,创建两个单独的列表,一个仅包含点名称 [s1,s2,s3,s4]
,另一个包含点名称及其坐标 [s1:(1953.2343076828638, 730.0513627132909),(1069.4232335022705, 5882.057343563125)...]
我有以下用于创建随机点的代码。
n = 10
#print(n)
#for k in n:
V = []
V=range(n)
#print("vertices",V)
# Create n random points
random.seed()
pos = {i:(random.randint(0,4000),random.randint(0,5000)) for i in V}
#print("pos =", pos)
points = []
positions = []
for i in pos:
points.append(pos[i])
positions.append(i)
positions.append(pos[i])
假设我正在形成一个新列表 L
,其中包含两个现有点 4
和 7
。然后,L = [4,7]
当我在控制台中键入 L[0]
时,它会给我,4
和 pos[L[0]]
会给我它的坐标。
但是考虑到我的新列表 K= [i,j,k,l]
,当我在控制台中键入 K[0]
时,它会给我坐标,但不是它的名称。
我需要将 K
中的这些点添加到与上面定义的 pos
相同的列表中,并使用它们的坐标,但名称不同。有人可以帮我吗?
要按索引访问名称和坐标,请使用元组列表。请注意,您需要明确命名这些。您最好避免此步骤,方法是使用元组列表从头开始存储您的名称坐标对。
要按名称访问,请使用字典。
i, j, k, l = (1953.2343076828638, 730.0513627132909),\
(1069.4232335022705, 5882.057343563125),\
(2212.5767664977293, 3335.942656436875),\
(4386.765692317136, 1318.948637286709)
K = [(name, var) for name, var in zip('ijkl', (i, j, k, l))]
## ACCESS BY INDEX
name_coord = K[0] # ('i', (1953.2343076828638, 730.0513627132909))
name = K[0][0] # 'i'
coord = K[0][1] # (1953.2343076828638, 730.0513627132909)
## ACCESS BY NAME
d = dict(K)
coord = d['i'] # (1953.2343076828638, 730.0513627132909)
根据@jpp 的回答,我会选择名为 namedtuple
的东西。字典通常比元组占用更多 space。
from collections import namedtuple
coord = namedtuple('Coordinate', 'name coord')
i, j, k, l = (1953.2343076828638, 730.0513627132909),\
(1069.4232335022705, 5882.057343563125),\
(2212.5767664977293, 3335.942656436875),\
(4386.765692317136, 1318.948637286709)
K = [coord(name, var) for name, var in zip('ijkl', (i, j, k, l))]
它允许你做:
c = K[0]
print(c.name)
print(c.coord)