[英]Python: return list from for loop
所以我有
packs_purchased = (10, 6, 36)
dice_purchased = (2, 0, 1)
board_games_purchased = (3, 2, 0)
和
prices = (4.25, 125, 11, 50)
我如何让这个 for 循环返回一个列表而不仅仅是输出
for packs_purchased in packs_purchased:
if packs_purchased < 35:
packs_spent = packs_purchased * prices[0]
else:
packs_spent = (int(math.floor(packs_purchased / 36)) * prices[1]) + ((packs_purchased % 36) * prices[0])
print("%.2f" % packs_spent)
现在它打印
42.50
25.50
125.00
我希望它返回一个列表,比如
packs_spent(42.50, 25.50, 125.00)
只需在for
循环之前创建一个列表,然后附加到该列表而不是打印。
packs_spent = []
for pack in packs_purchased:
if pack < 35:
spent = pack * prices[0]
else:
spent = (int(math.floor(pack / 36)) * prices[1]) + ((pack % 36) * prices[0])
packs_spent.append(spent)
print(packs_spent)
# [42.5, 25.5, 125.0]
要使用正确的小数位数并以问题中显示的格式打印,您可以使用列表理解:
print("packs_spent(",
', '.join(f"{i:.2f}" for i in packs_spent),
")",
sep="")
# packs_spent(42.50, 25.50, 125.00)
只需声明一个空列表并将结果附加到该列表中。
packs_list = []
for packs_purchased in packs_purchased:
if packs_purchased < 35:
packs_spent = packs_purchased * prices[0]
else:
packs_spent = (int(math.floor(packs_purchased / 36)) * prices[1]) + ((packs_purchased % 36) * prices[0])
packs_list.append(packs_spent)
print(packs_list)
您的 Python 代码中有一些愚蠢的错误以及一些样式错误(但我们不会去那里,因为它并不重要)。
错误包括,您对迭代变量和iterable
使用相同的variable
,在使用iterable
以供将来使用时可能会造成重大混淆,并且您可能会得到int
而不是tuple
。
另外,旁注, list comprehension
在local
范围内具有变量而不是global
,因此它不会造成混淆,但我仍然建议更改迭代变量名称。
@Green Cloak Guy 已经给出了答案,但可以使用列表理解即兴创作。 它还有助于使用比list
略少的内存,更少的行使用和更少的时间消耗。 我建议使用array
by numpy ,但让我们离开它。
print([f'{packs * prices[0]:.2f}' if packs < 35 else f'{(int(math.floor(packs / 36)) * prices[1]) + ((packs % 36) * prices[0]):.2f}' for packs in packs_purchased])
输出:
>>> [42.50, 25.50, 125.00]
上面的输出称为list
而不是您在所需输出中声明的内容。 如果你想要那个输出,你可以做,就像@Green Cloak Guy 所做的那样,但仍然是一个例子:
CREATED_LIST = [f'{packs * prices[0]:.2f}' if packs < 35 else f'{(int(math.floor(packs / 36)) * prices[1]) + ((packs % 36) * prices[0]):.2f}' for packs in packs_purchased]
print(f'packs_spent({", ".join(CREATED_LIST)})')
输出:
>>> packs_spent(42.50, 25.50, 125.00)
import math
packs_purchased = (10, 6, 36)
dice_purchased = (2, 0, 1)
board_games_purchased = (3, 2, 0)
prices = (4.25, 125, 11, 50)
result = []
for packs_purchased in packs_purchased:
if packs_purchased < 35:
packs_spent = packs_purchased * prices[0]
else:
packs_spent = (int(math.floor(packs_purchased / 36)) * prices[1]) + ((packs_purchased % 36) * prices[0])
a = ("%.2f" % packs_spent)
result.append(a)
result = list(map(float, result))
print("packs_spent:", (result))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.