Сравнение списков в списке по индексам на уникальность Python
Не могу понять как написать данный код:
Суть затеи в том что нужно сравнить списки в списках по индексам от [0:3] и получить результат менуя повторения.
Есть большой сгенерированый список в result, мне нужно чтобы в нем не повторялись первые 3 элемента......
from more_itertools import unique_everseen
from itertools import product
m = [
[2,3,5,6,7],
[10,11,12,13,15],
[20,21,22,23,25],
[36,35,33,32,30],
[30,32,33,35,36],
[42,43,45,48,46],
]
result = []
for subset in product(*m):
x = list(unique_everseen(subset))
if len(x) == 6:
result.append(x)
len_m = len(m) * len(m) * len(m) + 1
res = []
for i in range(len(result)):
tmp = [True for j in range(i + 1, len(result)) if set(result[:3]) != set(result[:3])]
if len(tmp) == 0:
res.append(result[i])
print(res)
Ответы (2 шт):
Автор решения: Zhihar
→ Ссылка
ну если совсем в лоб, то получается вот так:
arr = [[1,2,3,4],[1,2,3,4,5],[1,3,2,4,5],[1,2,3,6,7],[8,9,3,4,5],[2,3,4,5],[2,3,4,5,6]]
res = []
for i in range(len(arr)):
tmp = [True for j in range(i + 1, len(arr)) if arr[j][3] == arr[i][3]]
if len(tmp) == 0:
res.append(arr[i])
print(res)
P.S.
скорее всего последний список все таки не должен учитываться, ведь по той логике он всегда будет попадать в результирующий список, тогда надо сделать
for i in range(len(arr) - 1):
Автор решения: Робин Гут
→ Ссылка
import random
import itertools
m = (
[2, 3, 5, 6, 7],
[10, 11, 12, 13, 15],
[20, 21, 22, 23, 25],
[36, 35, 33, 32, 30],
[30, 32, 33, 35, 36],
[42, 43, 45, 48, 46]
)
combinations = list(itertools.product(*m[:3]))
part1 = [list(comb) for comb in combinations]
result = []
for i in range(len(part1)):
result.append(part1[i])
for j in range(3, len(m)):
result[i].append(random.choice(m[j]))
for comb in result:
print(comb)
print(len(result))