Удаление повторяющихся элементов двумерного списка Python
Подскажите, пожалуйста, как исправить. Есть список
list1 = [[],
[3, 5, 7],
[7, 9, 11, 15],
[3, 5, 6, 8, 10],
[31, 56, 71],
[3, 7, 9, 11],
[127, 128, 129]]
нужно получить список
list2 = [[],
[3, 5, 7],
[9, 11, 15],
[6, 8, 10],
[31, 56, 71],
[],
[127, 128, 129]]
т.е. убрать все повторяющиеся значения.
list1 = [[], [3, 5, 7], [7, 9, 11, 15], [3, 5, 6, 8, 10], [31, 56, 71], [3, 7, 9, 11], [127, 128, 129]]
list2 = []
for x1 in list1:
list2.append([])
for y1 in x1:
for x2 in range(len(list1)):
for y2 in x1:
if y1 not in list2:
list2.append(y1)
print(list2)
Код выводит:
[[], [], 3, 5, 7, [], 9, 11, 15, [], 6, 8, 10, [], 31, 56, 71, [], [], 127, 128, 129]
Если я пишу list2[x2].append(y1), то программа завершается с ошибкой IndexError: list index out of range.
Ответы (1 шт):
Автор решения: Евгений
→ Ссылка
list1 = [[],
[3, 5, 7],
[7, 9, 11, 15],
[3, 5, 6, 8, 10],
[31, 56, 71],
[3, 7, 9, 11],
[127, 128, 129]]
list2 = []
for line in list1:
list2.append([])
for elem in line:
for line_2 in list2:
if elem in line_2:
break
else:
list2[-1].append(elem)
print(list2)
Уж очень вы намудрили с вложенными циклами. К тому же, элементы нужно добавлять во внутренний список, а не во внешний.
Результат:
[[],
[3, 5, 7],
[9, 11, 15],
[6, 8, 10],
[31, 56, 71],
[],
[127, 128, 129]]