繁体   English   中英

Python:从for循环返回列表

[英]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 comprehensionlocal范围内具有变量而不是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.

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