代码之家  ›  专栏  ›  技术社区  ›  ccc

在python中重命名点

  •  0
  • ccc  · 技术社区  · 6 年前

    我收集了一些新的观点 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] 在它给我的控制台里, pos[L[0]] 给我它的坐标。

    但考虑到我的新名单 K= [i,j,k,l] ,当我打字时 K[0] 在控制台中,它给出了坐标,但没有给出它的名称。

    我需要把这些要点加进去 K 到同一个列表 pos 上面定义了它们的坐标,但是有不同的名称。有人能帮我吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   jpp    6 年前

    要通过索引访问名称和坐标,请使用元组列表。请注意,您需要显式地命名它们。您最好从一开始就使用元组列表来存储名称-坐标对,从而避免这一步。

    要按名称访问,请使用字典。

    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)
    
        2
  •  1
  •   Nf4r    6 年前

    基于@jpp答案,我会选择名为 namedtuple . 字典通常比元组占用更多的空间。

    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)
    
    推荐文章