有人可以帮我简化 Python 函数吗?
Can someone help me simplify my Python function?
我正在 Python 完成家庭作业。我制作了一个使用列表作为输入的函数,但我还不太擅长 Python 编程。该功能按预期方式工作,但一团糟。唯一真正使用的输入是 "values"。此输入是一个包含更多列表的列表。在列表中必须至少有 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])
提前致谢!
试试这个
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]]
我正在 Python 完成家庭作业。我制作了一个使用列表作为输入的函数,但我还不太擅长 Python 编程。该功能按预期方式工作,但一团糟。唯一真正使用的输入是 "values"。此输入是一个包含更多列表的列表。在列表中必须至少有 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])
提前致谢!
试试这个
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]]