列表清单,将最后一项与python比较

时间:2018-08-16 13:00:59

标签: python list

我需要比较列表中的元素。我的代码用于列表列表中的两个项目,但是当我有两个以上的项目时,我不知道如何进行。 我的输入具有相同的长度。而且我需要比较hr { display: block; margin-top: 0.5em; margin-bottom: 0.5em; margin-left: auto; margin-right: auto; border-style: inset; border-width: 1px; transform: rotate(90deg); } ,如果重复检查d[][:1]并用较少的d[][:-1]打印d[]

我需要的打印件:d[][:-1]

代码:

d = [[1, 2, 3, 4, 4], [3, 2, 4, 2, 1]]

编辑:

d = [[1, 2, 3, 4, 5],
     [1, 2, 3, 4, 6],
     [1, 2, 3, 4, 4],
     [3, 2, 4, 2, 5],
     [3, 2, 4, 2, 1]]

if d[0][:-1] == d[1][:-1]:  
    if d[0][-1] < d[1][-1]:  
        d.remove(d[1])  
    else:
        d.remove(d[0])

>>> print d
[[1, 2, 3, 4, 5], [1, 2, 3, 4, 4], [3, 2, 4, 2, 5], [3, 2, 4, 2, 1]]

5 个答案:

答案 0 :(得分:1)

您可以使用itertools.groupby将列表按除最后一项以外的所有项进行分组,然后使用min按最后一项对子列表进行排序:

from operator import itemgetter
from itertools import groupby
d = [[1, 2, 3, 4, 5],
     [1, 2, 3, 4, 6],
     [1, 2, 3, 4, 4],
     [3, 2, 4, 2, 5],
     [3, 2, 4, 2, 1]]
print([min(g, key=itemgetter(-1)) for _, g in groupby(d, key=lambda s: s[:-1])])

这将输出:

[[1, 2, 3, 4, 4], [3, 2, 4, 2, 1]]

答案 1 :(得分:0)

如果我很了解您想要什么,那么就可以做到这一点:

d = [[1, 2, 3, 4, 5],
     [1, 2, 3, 4, 6],
     [1, 2, 3, 4, 4],
     [3, 2, 4, 2, 5],
     [3, 2, 4, 2, 1]]


mins = {}
for a_list in d:
    list_key = ','.join(map(str, a_list[:-1]))
    list_orderer = a_list[-1]
    if list_key not in mins or mins[list_key] > list_orderer:
        mins[list_key] = a_list

print(sorted(mins.values()))  # [[1, 2, 3, 4, 4], [3, 2, 4, 2, 1]]

它在Python 2和3中工作,它不需要对输入进行排序,也不需要任何依赖关系(这不是真正的参数)。

答案 2 :(得分:0)

您可以使用字典,这要利用以下事实:在您进行迭代时,只有最后一个值将附加到任何给定的键上。该解决方案不需要排序。

d2 = {tuple(key): val for *key, val in d}
res = [list(k) + [v] for k, v in d2.items()]

print(res)

[[1, 2, 3, 4, 4],
 [3, 2, 4, 2, 1]]

请注意,元组转换是必需的,因为列表不可散列,因此不能用作字典键。

编辑:正如@JonClements所建议的那样,您可以这样写:

res = list({tuple(el[:-1]): el for el in d}.values())

答案 3 :(得分:0)

您也可以这样操作:

d = [[1, 2, 3, 4, 5],
     [1, 2, 3, 4, 6],
     [1, 2, 3, 4, 4],
     [3, 2, 4, 2, 5],
     [3, 2, 4, 2, 1]]

sublists = list(set(tuple(i[:-1]) for i in d))
mins = [min([elem for elem in d if elem[:-1]==list(s)])for s in sublists]

print(mins)

输出:

[[3, 2, 4, 2, 1], [1, 2, 3, 4, 4]]

答案 4 :(得分:0)

扩大blhsingsolution。对于更大的数据,无需进行排序。

import pandas as pd

cols = ['v1', 'v2', 'v3', 'v4', 'v5']

df = pd.DataFrame(d, columns=cols)

ndf = df.groupby(cols[:-1], as_index=False).min()

out = ndf.values.tolist()

print(out)

[[1, 2, 3, 4, 4], [3, 2, 4, 2, 1]]