Aloha. 2021-11-29 17:03 采纳率: 100%
浏览 13
已结题

【求解答】廖雪峰教程Python中,用生成器生成杨辉三角过程中的语法问题

杨辉三角定义如下:

1

/ \

1 1

/ \ / \

1 2 1

/ \ / \ / \

1 3 3 1

/ \ / \ / \ / \

1 4 6 4 1

/ \ / \ / \ / \ / \

1 5 10 10 5 1

把每一行看做一个list,试写一个generator,不断输出下一行的list:

def triangles():
    L = [1]                                               #方法一
    while True:
        yield L
        L = L + [0]                                       #为何不能用L.append(0)?
        L = [L[i] + L[i - 1] for i in range(len(L))]

#    s = [1]                                              #方法二
#    while True:
#       yield s[:]                                       #为何一定要加[:]而不能直接yeild s?
#        s.append(0)
#        l = s[:]
#        for i in range(len(s)):
#            l[i] = s[i] + s[i - 1]
#       s = l[:]

```python



```    # 期待输出:
    # [1]
    # [1, 1]
    # [1, 2, 1]
    # [1, 3, 3, 1]
    # [1, 4, 6, 4, 1]
    # [1, 5, 10, 10, 5, 1]
    # [1, 6, 15, 20, 15, 6, 1]
    # [1, 7, 21, 35, 35, 21, 7, 1]
    # [1, 8, 28, 56, 70, 56, 28, 8, 1]
    # [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
 n = 0
 results = []
 for t in triangles():
     results.append(t)
     n = n + 1
     if n == 10:
         break

 for t in results:
     print(t)
 if results == [
         [1],
         [1, 1],
         [1, 2, 1],
         [1, 3, 3, 1],
         [1, 4, 6, 4, 1],
         [1, 5, 10, 10, 5, 1],
         [1, 6, 15, 20, 15, 6, 1],
         [1, 7, 21, 35, 35, 21, 7, 1],
         [1, 8, 28, 56, 70, 56, 28, 8, 1],
         [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
 ]:
     print('测试通过!')
 else:
     print('测试失败!')

  • 写回答

1条回答 默认 最新

  • 关注

    L = L + [0] 会产生一个新列表,在新列表中添加0。不会影响 yield L 返回的列表
    而用L.append(0) 是在原列表中添加0,不会产生一个新列表。原列表用 yield L 返回并添加到 results 中,
    L列表就与上一次添加到 results 中的列表是同一个地址, 对L列表中添加0,上一次添加到 results 中的列表也就添加了0。

    解决方式就是你方法二那样。用 yield L[:]复制出一个新列表,返回新列表添加到 results 中。
    这样L列表就与上一次添加到 results 中的列表不是同一个地址了,对L列表中添加0,不会影响上一次添加到 results 中的列表。

    如有帮助,望采纳!谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 已采纳回答 11月30日
  • 创建了问题 11月29日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?