Python сортирует элементы частичного списка - PullRequest
0 голосов
/ 27 июня 2018

Я проанализировал TSV-файл и получил следующую структуру:

[['x1','y1','x2','y2'],
[1,1,0,80],
[.95,1,.05,70],
[.93,1,.1,65],
…
]

Мои x1 значения расположены в порядке убывания; начиная с 1 до 0. Мои значения x2 в порядке возрастания; начиная с 0 до 1. Мне нужно, чтобы оба были в порядке возрастания. Я не могу просто перевернуть список, иначе x2 будет в порядке убывания. Также обратите внимание, что x1 и y1 являются парами, поэтому что бы мы ни делали с x1, мы должны сделать с y1, чтобы убедиться, что данные все еще сохраняются.

Я пропустил мою попытку из позора, но если все обещают не смеяться, я попытался добавить -i, чтобы получить n-й последний элемент из моего первоначального списка. raw_data - структура данных, показанная выше.

new_list = [[raw_data[2][-i], raw_data[3][-i]] for i in raw_data

К сожалению, это не сработало.

Вопрос: Как я могу написать список, в котором мои x1 (и соответствующие значения y1) находятся в порядке возрастания?

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете воспользоваться тем фактом, что при сравнении кортежей сравнение основывается на первом элементе, а для равных первых элементов сравнивается второй элемент. Имея это в виду, вы могли бы сначала втирать свой список списков в список кортежей, связывающих каждое значение 'x1' с соответствующим значением 'y1', а затем получать отсортированный список:

>>> lst = [['x1','y1','x2','y2'],[1,1,0,80],[.95,1,.05,70],[.93,1,.1,65]]
>>> sorted((x1, y1) for x1, y1, x2, y2 in lst[1:])
[(0.93, 1), (0.95, 1), (1, 1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...