Как я могу успешно отбросить список списков

Итак, я запускаю скрипт, который добавляется в список, списки значений, но в некоторых случаях я получаю практически одинаковые данные, просто они будут переупорядочены по-разному, я хочу проверить это путем проверки моего добавленного списка, чтобы увидеть, действительно ли мой переупорядоченный список там. Например, у меня будет такой список:

sampleList = [
    [0,5,1,4,8,9],
    [5, 4, 8, 9, 0, 1],
    [1, 0, 4, 5, 8, 9],
    [4, 8, 1, 0, 5, 9],
    [7,6,2],
]

По сути, я хочу либо удалить "дубликаты" (которые могут иметь другой порядок тех же элементов) из этого списка, либо добавить только первые и неповторяющиеся результаты и обрезать остальные, чтобы в итоге получился такой список:

culledList = [
    [0,5,1,4,8,9],
    [7,6,2],
] 

2 ответа

Если вы умеете отбрасывать дубликаты, вы можете создавать наборы, потому что они просты:

sample_list = [
    [0,5,1,4,8,9],
    [5, 4, 8, 9, 0, 1],
    [1, 0, 4, 5, 8, 9],
    [4, 8, 1, 0, 5, 9],
    [7,6,2],
]

# This is a set comprehension. Unfortunately,
# sets are not hashable, so we have to convert
# to a `tuple`, which is.
culled_data = {tuple(set(sublist)) for sublist in sample_list}

# or as @Copperfield so helpfully pointed out, a frozenset
culled_data = {frozenset(sublist) for sublist in sample_list}

print(culled_data)
print(list(culled_data))

# Here is a list comprehension to produce a list of
# lists kind of like our original format. If that
# is important, anyway.
culled_list = [list(data) for data in culled_data]
print(culled_list)

Если порядок в списках sampleList не имеет значения, вы можете отсортировать ВСЕ списки, прежде чем добавлять их с помощью метода.sort(). Это позволит обнаружить дубликаты и предоставить возможность проверки.

    sampleList=[[1,2,3][4,5,6][7,8,9]]
    l=[2,3,1]
    if not(l.sort() in sampleList): sampleList.append(l.sort())

Это не добавит l в sampleList, потому что l.sort (то есть [1,2,3]) sampleList уже содержит идентичный элемент.


РЕДАКТИРОВАТЬ

    culledList=[]
    sortedList=[]
    for i in sampleList:
        if not(i.sort() in sortedList):
            sortedList.append(i.sort())
            culledList.append(i)
Другие вопросы по тегам