Проблема с получением пар в трехмерном списке с использованием понимания списка - PullRequest
1 голос
/ 10 июля 2020

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

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

res = [[x[idx: idx+2] for i in mylist for x in i for idx in range(0, len(x) - 1)]]

print(res)

#res = [[[3, 2], [2, 4], [4, 3], [3, 2], [2, 1], [2, 1], [1, 2], [2, 3], [3, 1], [2, 1]]]

Как видите, я получаю 3D-список с парами, но он не разделен, это просто простой 3D-список, я ожидал этого:

#Output
res = [[[3, 2], [2, 4], [4, 3], [3, 2], [2, 1], [2, 1]], [[1, 2], [2, 3], [3, 1], [2, 1]]]
#                                                       ^
#                                              Here is the separation

Я работаю над пониманием своего списка, но не вижу, где происходит проблема, я считаю, что с скобкой что-то не так, но Я пробовал разные комбинации, но, похоже, ничего не работает, так что любая помощь будет оценена. , Я имею в виду, используя res, чтобы получить:

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

#[3, 2], [2, 1] eliminated

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

Ответы [ 2 ]

1 голос
/ 10 июля 2020

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

mylist = [[[3, 2, 4, 3], [3, 2, 1], [2, 1]], [[1, 2, 3], [3, 1], [2, 1]]]
res = []

for inner in mylist:
    temp = []
    for each in inner:
        for e in zip(each, each[1:]):
            if list(e) not in temp:
                temp.append(list(e))
    res.append(temp)

print(res)  # [[[3, 2], [2, 4], [4, 3], [2, 1]], [[1, 2], [2, 3], [3, 1], [2, 1]]]
1 голос
/ 10 июля 2020
[[x[idx: idx+2] for x in i for idx in range(0, len(x) - 1)] for i in mylist ]
...