Python:如果列表中的第一个元素重复且列表系列中的第二个元素最低,则删除列表中的列表

时间:2019-03-19 15:25:19

标签: python python-3.x list

我有一个清单清单。每个列表具有相同数量的元素。如果新列表取代了所有旧列表中的第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 :(得分:0)

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)

答案 1 :(得分:0)

像字典这样的东西在这里会更好吗?

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]]