gpt4 book ai didi

python - 理解特定的 Python 列表理解

转载 作者:行者123 更新时间:2023-12-01 08:24:13 26 4
gpt4 key购买 nike

我正在尝试使用这段代码,在给定骰子数量和面数的情况下,生成骰子掷出的所有可能结果。该代码有效(但我不太明白列表理解是如何工作的。

def dice_rolls(dice, sides):
"""
Equivalent to list(itertools.product(range(1,7), repeat=n)) except
for returning a list of lists instead of a list of tuples.
"""
result = [[]]
print([range(1, sides + 1)] * dice)
for pool in [range(1, sides + 1)] * dice:
result = [x + [y] for x in result for y in pool]
return result

因此,我正在尝试重写列表理解

result = [x + [y] for x in result for y in pool]

进入 FOR 循环以尝试了解它是如何工作的,但目前无法正确执行此操作。当前失败的代码:

for x in result:
for y in pool:
result = [x + [y]]

第二个问题:如果我想把它变成一个生成器(因为如果你有足够的骰子和面,这个函数会占用内存),我是否可以简单地在生成列表中的每个项目时生成它而不是抛出它进入结果列表吗?

编辑:在得到很好的回应后,我想出了一种将列表理解分解为循环的方法,并希望捕获它:

def dice_rolls(dice, sides):
result = [[]]
for pool in [range(1, sides + 1)] * dice:
temp_result = []
for existing_values in result: # existing_value same as x in list comp.
for new_values in pool: # new_value same as y in list comp.
temp_result.append(existing_values + [new_values])
result = temp_result
return result

最佳答案

我对这个问题(以及一般的列表推导式)的第一直觉是使用递归。尽管您要求循环,但这是令人惊讶的挑战。

这就是我想出的;

def dice_rollsj(dice, sides):
result = [[]]

for num_dice in range(dice):
temp_result = []
for possible_new_values in range(1, sides+1):
for existing_values in result:
new_tuple = existing_values + [possible_new_values]
temp_result.append(new_tuple)
result = temp_result

我认为您会得到相同的正确答案,但数字的顺序会有所不同。这可能是由于值附加到列表的方式造成的。我不知道......请告诉我这是否有帮助。

我尝试添加尽可能多的行,因为目标是扩展和理解理解。

关于python - 理解特定的 Python 列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54391563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com