重命名 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,其中包含两个现有点 47。然后,L = [4,7]

当我在控制台中键入 L[0] 时,它会给我,4pos[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)