繁体   English   中英

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

[英]Can someone help me simplify my Python function?

我正在 Python 中完成我的家庭作业。 我制作了一个使用列表作为输入的 function,但我还不太擅长 Python 编程。 function 按预期方式工作,但一团糟。 唯一真正使用的输入是“值”。 此输入是一个包含更多列表的列表。 在列表中必须至少有 2 个列表。 输入中允许的最大列表数量为 8。如果输入只有 2 个列表,则其他 6 个列表必须为 [0]。 输入示例:[[0, 1],[3, 8, 10]]。 使用示例输入 output 必须是:

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

提前致谢!

尝试这个

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

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM