Как отменить кортежи, определенные в списке? - PullRequest
0 голосов
/ 02 февраля 2019

Я не знаю, как это объяснить, но я постараюсь.У меня есть предопределенные кортежи и список, который содержит эти кортежи:

EL = (42.7358, -84.4844)
Det = (42.3831, -83.1022)
Kal = (42.2747, -85.5883)
AA = (42.2753, -83.7308)
Lan = (42.7092, -84.5539)
GR = (42.9614, -85.6558)
SSM = (46.4844, -84.3656)

cities = [EL, Det, Kal, AA, Lan, GR, SSM]
  1. Города расположены в (x, y) порядке.Как я могу поменять порядок на (y, x) и сохранить его как города2.

  2. Как изменить порядок элементов в городах?Например, это будет выглядеть так:

    cities3 = [SSM, GR, Lan, AA, Kal, Det, EL]
    

Я пробовал towns.reverse (), но она изменила координату.Будем очень благодарны за любые советы и подсказки.

Спасибо, ребята.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Вы правы в отношении изменения элементов:

cities.reverse()

reverse выполняет работу, изменяя элементы на месте (это изменяет cities):

Поскольку у вас есть кортежикоординат невозможно поменять местами (x,y), но, если вы хотите создать другой список, списочные списки - один из правильных инструментов для использования.

Если вы хотите поменять (x,y) на (x,y):

cities_swap_xy = [(y,x) for (x,y) in cities]

для создания другого списка в обратном порядке:

cities_reverse = cities[-1:0:-1]

для смены координат и изменения города:

cities_reverse_and_swap_xy = [(y,x) for (x,y) in cities[-1:0:-1]]

Существует многодокументация по списку, хорошее обучение!

0 голосов
/ 02 февраля 2019

У вас есть список кортежей.Обмен кортежей - это просто доступ к 1-му индексу в кортеже перед индексом 0 и сохранение выходных данных.

EL = (42.7358, -84.4844)
Det = (42.3831, -83.1022)
Kal = (42.2747, -85.5883)
AA = (42.2753, -83.7308)
Lan = (42.7092, -84.5539)
GR = (42.9614, -85.6558)
SSM = (46.4844, -84.3656)

cities = [EL, Det, Kal, AA, Lan, GR, SSM]
print(cities)
#Output:
[(42.7358, -84.4844),
 (42.3831, -83.1022),
 (42.2747, -85.5883),
 (42.2753, -83.7308),
 (42.7092, -84.5539),
 (42.9614, -85.6558),
 (46.4844, -84.3656)]


cities2 = [(x[1], x[0]) for x in cities]
print(cities)
#Output:
[(-84.4844, 42.7358),
 (-83.1022, 42.3831),
 (-85.5883, 42.2747),
 (-83.7308, 42.2753),
 (-84.5539, 42.7092),
 (-85.6558, 42.9614),
 (-84.3656, 46.4844)]

Что касается обращения к списку, существует много способов сторнировать список .некоторые создают копию, другие изменяют исходный список, например .reverse()

cities3 = cities[::-1] #created a reversed copy.
#Alternatively
cities3 = list(reversed(cities))

Наконец, однако, рекомендация.

Ваши списки кортежей как есть, не составляют многосмысл, но метки имени дают кортежи смысл.

Вы должны рассмотреть другую структуру данных для хранения этой информации, и словари в этом случае имеют смысл.Вы можете рассматривать их как сопоставления между key:value парами.

EL = (42.7358, -84.4844)
Det = (42.3831, -83.1022)
Kal = (42.2747, -85.5883)
AA = (42.2753, -83.7308)
Lan = (42.7092, -84.5539)
GR = (42.9614, -85.6558)
SSM = (46.4844, -84.3656)

cities = [EL, Det, Kal, AA, Lan, GR, SSM]
city_names = ["EL", "Det", "Kal", "AA", "Lan", "GR", "SSM"]
cities_dict = dict(zip(city_names, cities))

Обратите внимание, что приведенный выше код эквивалентен следующему:

cities_dict = {"EL": EL,
          "Det": Det,
          "Kal": Kal,
          "AA": AA,
          "Lan": Lan,
          "GR": GR,
          "SSM": SSM
        }

print(cities_dict)
#Output:
{'EL': (42.7358, -84.4844),
 'Det': (42.3831, -83.1022),
 'Kal': (42.2747, -85.5883),
 'AA': (42.2753, -83.7308),
 'Lan': (42.7092, -84.5539),
 'GR': (42.9614, -85.6558),
 'SSM': (46.4844, -84.3656)}

Теперь, предостережение, словари по своей природе неупорядочены,Если вам нужна структура данных, похожая на диктовку, которая поддерживает порядок, используйте OrderedDict .

from collections import OrderedDict
cities = [EL, Det, Kal, AA, Lan, GR, SSM]
city_names = ["EL", "Det", "Kal", "AA", "Lan", "GR", "SSM"]
cities_dict = OrderedDict(zip(city_names, cities))
print(cities_dict)

cities2_dict = OrderedDict((key, (v[1], v[0])) for (key,v) in cities_dict.items())
print(cities2_dict)

cities3_dict = OrderedDict(reversed(cities_dict.items()))
print(cities3_dict)
...