структура понимания списка, эквивалентная для примера цикла - PullRequest
0 голосов
/ 18 октября 2018

Я попытался повторить пример цикла for, чтобы вывести список, чтобы получить тот же результат без успехов.

TS = [[[1, 6], [1, 7], [1, 8]], [[2, 2], [2, 2], [2, 2]], [[3, 3], [3, 3], [3, 3]]]

TSF=[]
for i in TS:
    F=[]
    for j in i:
        for e in j:
            F.append(e)
    TSF.append(F) 

print TSF
[[1, 6, 1, 7, 1, 8], [2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3]]

Помощь очень приветствуется

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

следующий код должен получить список для вас:

[[e for j in i for e in j] for i in TS]
0 голосов
/ 18 октября 2018

Это пример с таким же ярлыком

[[e for j in i for e in j] for i in TS]
0 голосов
/ 18 октября 2018

Или используйте chain из itertools:

[list(chain(*i)) for i in TS]

Демонстрация:

from itertools import chain
TS=[[[1,2],[3,4]]]
TSF=[list(chain(*i)) for i in TS]

Или как с from_iterable:

[list(chain.from_iterable(i)) for i in TS]

Демонстрация:

from itertools import chain
TS=[[[1,2],[3,4]]]
TSF=[list(chain.from_iterable(i)) for i in TS]

Или functools.reduce:

[functools.reduce(operator.concat, i) for i in TS]

Демонстрация:

from functools import reduce
from operator import concat
TS=[[[1,2],[3,4]]]
TSF=[reduce(concat,i) for i in TS]

Или Numpy:

[list(numpy.array(i).flat) for i in TS]

Демо:

import numpy as np
TS=[[[1,2],[3,4]]]
TSF=[list(np.array(i).flat) for i in TS]

Или снова Numpy:

[list(np.concatenate(i)) for i in TS]

Демо:

import numpy as np
TS=[[[1,2],[3,4]]]
TSF=[list(np.concatenate(i)) for i in TS]

Для всех случаев:

print(TSF)

Как и ожидалось:

[[1, 2, 3, 4]]
0 голосов
/ 18 октября 2018

Вы можете использовать следующее понимание списка, чтобы сгладить внутренние списки:

[[i for s in l for i in s] for l in TS]

, так что при TS = [[[1,2,3],[2]],[[2,3]]] это (и ваше TSF) вернет:

[[1, 2, 3, 2], [2, 3]]
...