Переименование точек в питоне - PullRequest
0 голосов
/ 27 мая 2018

У меня есть коллекция новых точек 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, определенный выше с их координатами, но с другими именами.Может кто-нибудь, пожалуйста, помогите мне с этим?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

На основании ответа @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)
0 голосов
/ 28 мая 2018

Чтобы получить доступ к имени и координатам по индексу, используйте список кортежей.Обратите внимание, что вам нужно назвать их явно.Желательно избегать этого шага, используя список кортежей для хранения пар имя-координата с начала.

Для доступа по имени используйте словарь.

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)
...