Как сделать изрезанный массив в Python? - PullRequest
0 голосов
/ 06 июля 2018

У меня есть такой массив: ['a', ['e', 'r', 't'], 'c'].

Я хочу использовать какую-то обработку, чтобы сделать массив аккуратным: [['a', 'e', 'c'], ['a', 'r', 'c'], ['a', 't', 'c']].

Если массив: ['a', ['e', 'r', 't'], ['c', 'd']].

Результат: [['a', 'e', 'c'], ['a', 'e', 'd'], ['a', 'r', 'c'], ['a', 'r', 'd'], ['a', 't', 'c'], ['a', 't', 'd']].

И длина массива не фиксирована до 3, другие примеры:

['a', 'b'] = > ['a', 'b']
['a', ['b', 'c']] => [['a', 'b'], ['a', 'c']]
['ab', ['b', 'c']] => [['ab', 'b'], ['ab', 'c']]
[[1, 2], 3, 4] => [[1, 3, 4], [2, 3, 4]]

Так что мне делать? Есть ли решение в Numpy?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Если я не пойму вопрос неправильно, вы просто захотите product подсписков, хотя сначала вам нужно обернуть отдельные элементы в списки.

>>> from itertools import product
>>> arr = ['a', ['e', 'r', 't'], ['c', 'd']]
>>> listified = [x if isinstance(x, list) else [x] for x in arr]
>>> listified
[['a'], ['e', 'r', 't'], ['c', 'd']]
>>> list(product(*listified))
[('a', 'e', 'c'),
 ('a', 'e', 'd'),
 ('a', 'r', 'c'),
 ('a', 'r', 'd'),
 ('a', 't', 'c'),
 ('a', 't', 'd')]
0 голосов
/ 06 июля 2018

У меня есть рекурсивное решение:

inlist1 = ['ab', ['e', 'r', 't'], ['c', 'd']]
inlist2 = [['a', 'b'], ['e', 'r', 't'], ['c', 'd']]
inlist3 = [['a', 'b'], 'e', ['c', 'd']]


def jagged(inlist):
    a = [None] * len(inlist)

    def _jagged(index):
        if index == 0:
            print(a)
            return
        v = inlist[index - 1]
        if isinstance(v, list):
            for i in v:
                a[index - 1] = i
                _jagged(index - 1, )
        else:
            a[index - 1] = v
            _jagged(index - 1)

    _jagged(len(inlist))


jagged(inlist3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...