【问题标题】:Python: return list from for loopPython:从for循环返回列表
【发布时间】:2021-12-17 12:04:04
【问题描述】:

所以我有

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)

【问题讨论】:

  • packs_spent 附加到列表中,并在最后返回。
  • 顺便说一句,不要对列表和迭代变量for packs_purchased in packs_purchased: 使用相同的变量。请改用for pack in packs_purchased: 之类的东西。
  • 另外,packs_spent(42.50, 25.50, 125.00) 不是一个列表。

标签: python list for-loop return


【解决方案1】:

只需在 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)

【讨论】:

    【解决方案2】:

    只需声明一个空列表并将结果附加到该列表中。

    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)
    

    【讨论】:

    • 请解释一下答案?
    【解决方案3】:

    您的 Python 代码中有一些愚蠢的错误以及一些样式错误(但我们不会去那里,因为它并不那么重要)。

    错误包括,您将相同的variable 用于迭代变量以及iterable,在将来使用iterable 时可能会造成很大的混乱,并且您可能会得到int 而不是@ 987654327@.

    另外,旁注list comprehensionlocal 范围内有变量,而不是global,因此不会造成混淆,但我仍然建议更改迭代变量名称。

    @Green Cloak Guy 已经给出了答案,但可以使用list comprehension 即兴创作。它还有助于使用比list 稍少的内存,更少的行数和更少的时间消耗。我建议numpy 使用array,但让我们离开吧。

    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)
    

    【讨论】:

      【解决方案4】:
      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))
      

      【讨论】:

      • 已经同上回答了
      猜你喜欢
      • 2015-12-30
      • 2019-07-31
      • 1970-01-01
      • 2011-07-05
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      相关资源
      最近更新 更多