有人可以帮我简化我的Python函数吗?

时间:2020-04-20 16:29:15

标签: python function simplify

我正在用Python进行作业。我做了一个使用列表作为输入的函数,但是我还不太擅长Python编程。该函数按应有的方式工作,但是很混乱。真正使用的唯一输入是“值”。此输入是一个包含更多列表的列表。列表内必须至少有2个列表。输入内部允许的最大列表数为8。如果输入仅包含2个列表,则其他6个列表必须为[0]。输入示例:[[0,1],[3,8,10]]。输入示例后,输出必须为:

[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]

当然,输入中的列表可能更大,甚至可能更多。这只是一个小例子,但我希望您能理解。在下面查看我编写的代码。

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 个答案:

答案 0 :(得分:3)

尝试一下

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]]

相关问题