【问题标题】:Turning a list comprehension into a for loop将列表推导转换为 for 循环
【发布时间】:2021-11-14 18:10:17
【问题描述】:

我正在尝试将列表理解代码 trow=[left+right for left,right in zip(trow+y, y+trow)] 转换为 for 循环而不是列表理解。我试图进行这种转换,但它不起作用。我将如何做到这一点?

For循环代码:

def PascalTriangle(n):
   trow = [1]
   y = [0]
   for x in range(n):
      print(trow)
      for left,right in zip(trow+y, y+trow):
        trow.append(left+right)
   return n>=1

PascalTriangle(6)

列表理解代码:

def PascalTriangle(n):
   trow = [1]
   y = [0]
   for x in range(n):
      print(trow)
      trow=[left+right for left,right in zip(trow+y, y+trow)]
   return n>=1

PascalTriangle(6)

输出:

[1]
[1, 1, 1]
[1, 1, 1, 1, 2, 2, 1]
[1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 3, 4, 3, 1]
[1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 3, 4, 3, 1, 1, 2, 2, 2, 3, 4, 3, 2, 3, 4, 4, 5, 7, 7, 4, 1]
[1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 2, 3, 4, 3, 1, 1, 2, 2, 2, 3, 4, 3, 2, 3, 4, 4, 5, 7, 7, 4, 1, 1, 2, 2, 2, 3, 4, 3, 2, 3, 4, 4, 5, 7, 7, 4, 2, 3, 4, 4, 5, 7, 7, 5, 5, 7, 8, 9, 12, 14, 11, 5, 1]

预期输出:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]

【问题讨论】:

  • trow.append(left+right) 就地并返回None。删除作业
  • 我已经做到了,但我将如何附加到trow 列表
  • 要澄清@rdas 的意思,而不是trow = trow.append(...),只需执行trow.append(...)
  • 我已经更新了我仍然无法达到预期输出的问题

标签: python list for-loop nested range


【解决方案1】:

您可以使用临时列表来收集所有值:

def PascalTriangle(n):
    trow = [1]
    y = [0]

    for x in range(n):
        print(trow)
        line = []
        for left, right in zip(trow + y, y + trow):
            line.append(left + right)
        trow = line
    return n >= 1


PascalTriangle(6)

输出:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多