Bagaimana saya bisa menghapus duplikat daftar dua dimensi tanpa mengubah urutannya?

list_j = [[100,2,3,3], [4,98,99,98], [5,99,98,4], [5,99,98,5], [100,99,98,100,100,6]]

list_pre = [list(set(i)) for i in list_j]
print(list_pre)

[[2, 3, 100], [98, 99, 4], [98, 99, 4, 5], [98, 99, 5], [98, 99, 100, 6]]

Seperti yang Anda lihat, itu mengubah urutannya. Yang saya inginkan adalah [[100,2,3,],...]

Keluaran yang diinginkan [[100,2,3,], [4,98,99], [5,99,98,4], [5,99,98], [100,99,98,6]]

0
Ella 9 Januari 2021, 19:08

4 jawaban

Jawaban Terbaik

Gunakan OrderedDict untuk mempertahankan urutan penyisipan kunci:

from collections import OrderedDict
list_j = [[100,2,3,3], [4,98,99,98], [5,99,98,4], [5,99,98,5], [100,99,98,100,100,6]]
output = [list(OrderedDict.fromkeys(x)) for x in list_j]

Memberi

[[100, 2, 3], [4, 98, 99], [5, 99, 98, 4], [5, 99, 98], [100, 99, 98, 6]]

Jika Anda menggunakan Python 3.7 atau lebih tinggi, Anda juga dapat menggunakan kamus normal karena mereka juga mempertahankan urutan penyisipan:

output = [list(dict.fromkeys(x)) for x in list_j]
5
Jarvis 9 Januari 2021, 16:19

Atau: :)

list_pre = [sorted(list(i), key=i.index) for i in list_j]
-1
SeanTolstoyevski 9 Januari 2021, 16:25

Pertanyaan yang sama di sini:

def f7(seq):
    seen = set()
    seen_add = seen.add
    return [x for x in seq if not (x in seen or seen_add(x))]

list_j = [[100,2,3,3], [4,98,99,98], [5,99,98,4], [5,99,98,5], [100,99,98,100,100,6]]

list_pre = [f7(i) for i in list_j]

print(list_pre)

Ini akan memberikan output yang diinginkan

0
mpountou 9 Januari 2021, 16:18

Coba ini:

def remove_duplicates(my_list):
    result_list = []
    for _list in my_list:
        result_list.append(sorted(set(_list), key=lambda ind: _list.index(ind)))
    return result_list
0
Higs 9 Januari 2021, 16:39