Python: удалить список в списке, если 1-й элемент в списке дублируется, а 2-й элемент является самым низким в серии списков - PullRequest
0 голосов
/ 19 марта 2019

У меня есть список списков.Каждый список имеет одинаковое количество элементов.Я хотел бы удалить весь список, если новый список заменяет старый, основанный на числовом ключе в n-м элементе, который есть во всех списках.Эта цифровая клавиша имеет шаг 1, начиная с 1. Желательна самая высокая клавиша.

all = [[123, 1],[456, 1],[789, 1],[123,2],[456, 2],[789,1]]

Последний элемент в каждом списке - это ключ: 2 заменяет 1 и т. Д. ... желаемый результат:

[[123,2],[456,2],[789,1]]

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Будет ли что-то вроде словаря работать лучше здесь?

all = [[123, 1],[456, 1],[789, 1],[123,2],[456, 2],[789,1]]

as_dict = {}
for item in all:
    if not (item[0] in as_dict and as_dict[item[0]] > item[1]):
        as_dict[item[0]] = item[1]

print(as_dict)
# Returns {123: 2, 456: 2, 789: 1}

На самом деле, если вы знаете, что вторые числа в каждой паре никогда не уменьшатся (например, вы не увидите что-то вроде [123,0]появиться позже в списке после [123,2]), тогда просто преобразование списка в словарь с dict() должно выполнить то же самое.Затем вы можете преобразовать его обратно в список, если хотите.

d = dict(all)  # This is {123: 2, 456: 2, 789: 1}
newlist = [ [k,d[k]] for k in d] # This is [[123, 2], [456, 2], [789, 1]]
0 голосов
/ 19 марта 2019
for x in list(all):
    for y in list(all):
        if y[0] == x[0] and y[1] <= x[1] and y is not x:
            all.remove(y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...