Сохранение размера в 3D-списке после цикла for - PullRequest
0 голосов
/ 10 июля 2020

Я работаю со списками и у меня возник вопрос. Итак, в основном у меня есть 3D-список, в котором я пытаюсь, чтобы после for l oop я сохранял второй и предпоследний элемент внутреннего списка, мой код выполняет свою работу, но он меняется с 3D-списка на 2D list, и я не хочу этого (это просто пример, в mylist может быть больше элементов) вот мой код

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

aux = []
for i in mylist:
    for j in i :
        if len(j) >= 4: 
            aux.append(j[1:-1])

print(aux)

# aux= [[4, 3, 5], [2, 3], [3, 5], [2, 5, 3], [4, 3], [4, 5], [4, 3]]

Я получил почти то, что мне нужно, но я ожидал этого вывода

aux = [[[4, 3, 5], [2, 3], [3, 5], [2, 5, 3]], [[4, 3], [4, 5], [4, 3]]] #Mantains the 3D dimension 

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

aux = [[j[1:-1] if len(j) >= 4 for j in i] for i in mylist] 
#But I get a syntax error

Я не знаю, есть ли Более простой способ сделать это (должно быть, но я тот парень, который все усложняет), возможно, гораздо более легкий способ понимания списка, которого я не вижу, поэтому любая помощь будет оценена, спасибо!

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Вы все правильно поняли, только вам нужно переместить оператор if в после для понимания списка:

aux = [[j[1:-1] for j in i if len(j)>=4] for i in mylist] 

output:

[[[4, 3, 5], [2, 3], [3, 5], [2, 5, 3]], [[4, 3], [4, 5], [4, 3]]]
0 голосов
/ 10 июля 2020

Вы были действительно близки!

Это должно сработать. Посмотрите его и посмотрите лог c задействовано

aux = [[j[1:-1] for j in i if len(j) >= 4] for i in mylist] 
...