Может ли кто-нибудь помочь мне упростить мою функцию Python? - PullRequest
1 голос
/ 20 апреля 2020

Я работаю над домашним заданием в Python. Я сделал функцию, которая использует списки в качестве входных данных, но я пока не очень хорош в программировании Python. Функция работает так, как ей удобно, но это беспорядок. Единственный вход, который действительно используется, это «значения». Этот вход представляет собой список, содержащий больше списков. Внутри списка должно быть как минимум 2 списка. Максимальное количество списков, разрешенных внутри ввода, равно 8. Если у входа есть только 2 списка, то остальные 6 списков должны быть [0]. Пример для ввода: [[0, 1], [3, 8, 10]]. При вводе примера выходные данные должны быть:

[0, 3, 0, 0, 0, 0, 0, 0, 0]

[0, 8, 0, 0, 0, 0, 0, 0]

[0, 10, 0, 0, 0, 0, 0, 0]

[1, 3, 0, 0, 0, 0, 0, 0]

[1, 8, 0, 0, 0, 0, 0, 0]

[1, 10, 0, 0, 0, 0, 0, 0]

Конечно, списки внутри ввода могут быть намного больше, и их может быть больше. Это всего лишь небольшой пример, но я надеюсь, что вы поняли идею. Посмотрите ниже код, который я сделал.

def mget(self, values):
    val = [[0], [0], [0], [0], [0], [0], [0], [0]]
    if self._steps[1] is 0:
        print("Error: operation not possible on field \"" + self._name + "\"")
    else:
        for x in range(len(val)):
            try:
                if not values[x]:
                    val[x] = [0]
                else:
                    val[x] = values[x]
            except IndexError:
                val[x] = [0]
        for a in val[0]:
            for b in val[1]:
                for c in val[2]:
                    for d in val[3]:
                        for e in val[4]:
                            for f in val[5]:
                                for g in val[6]:
                                    for h in val[7]:
                                        Field.get(self, [a, b, c, d, e, f, g, h])

Заранее спасибо!

1 Ответ

3 голосов
/ 20 апреля 2020

Попробуйте это

from itertools import product
a = [[0, 1],[3, 8, 10]]
res = [list(lst) + [0] * (8 - len(lst)) for lst in product(*a)]
print(res)

Вывод:

[[0, 3, 0, 0, 0, 0, 0, 0], [0, 8, 0, 0, 0, 0, 0, 0], [0, 10, 0, 0, 0, 0, 0, 0], [1, 3, 0, 0, 0, 0, 0, 0], [1, 8, 0, 0, 0, 0, 0, 0], [1, 10, 0, 0, 0, 0, 0, 0]]

...