【问题标题】:Why is this specific function returning 'none'; i'm trying to demonstrate a growing list?为什么这个特定的函数返回“无”;我试图展示一个不断增长的列表?
【发布时间】:2019-04-29 22:19:02
【问题描述】:

我想看到列表实时增长,当它完成后,我想通过索引查询附加的列表。

l=[]
def GrowingList(list):
    try:
        import random
        while True:
            rlist=lambda: print([random.randint(0,12)])
            list.append(rlist())
            print(list)
        return GrowingList(list)

    except KeyboardInterrupt:
        pass

这是一个成绩单:

Grown list
[None]
Grown list
[None, None]
Grown list
[None, None, None]
Grown list
[None, None, None, None]

当我查询新的编译列表时,它对每个索引都显示“无”:

>>> l
[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]

我是编程新手,所以冷静一下。该列表只是列表如何自动增长的练习功能。 'Grown list' 只是我想放在列表中的一个例子。

【问题讨论】:

  • 为什么import random 语句在while 循环内。此外,您的 lambda 函数看起来不正常。
  • 也不清楚您的代码试图做什么以及预期的输出应该是什么。请edit你的问题澄清发生了什么以及你被困在哪里。 lambda(显然)返回None;你期待什么,为什么?它应该如何退出无限循环?
  • 不断增长的列表是一个非常直接的问题。我期望将 0,12 之间的随机数附加到输入到函数中的列表中。打印输入的列表时,我想查看更新的列表。
  • lambda 显然没有返回任何结果,但是,也许建设性的评论会解释它的错误之处以及更好的选择。

标签: python-3.x list function loops append


【解决方案1】:

您在 lambda 中使用 print,它将返回 None。此外,您的 return 有一个不必要的递归。

编辑:您可以删除完整的 lambda 部分并直接将随机值附加到列表中。

您可以使用以下修改后的代码:

import random
l=[]
count=1
def GrowingList(list):
    try:
        count=1

        while True:
            rlist=random.randint(0,12)
            list.append(rlist)
            print(list)
            #below three line is added to break the code after 10 iteration you can remove them if you want to break on keyboard interrupt.  
            count+=1
            if count > 10:
                break
        return list

    except KeyboardInterrupt:
        pass

输出:

[1, 10]
[1, 10, 8]
[1, 10, 8, 11]
[1, 10, 8, 11, 2]
[1, 10, 8, 11, 2, 10]
[1, 10, 8, 11, 2, 10, 12]
[1, 10, 8, 11, 2, 10, 12, 5]
[1, 10, 8, 11, 2, 10, 12, 5, 0]
[1, 10, 8, 11, 2, 10, 12, 5, 0, 8]
[1, 10, 8, 11, 2, 10, 12, 5, 0, 8, 8]

【讨论】:

  • 感谢您的建设性反馈。我认为我必须使用 lambda,因为在函数外部使用 rlist=random.randint(0,12) 不起作用,所以我认为 lambda 是唯一的方法。
  • 调用 random 应该在函数中,因为您正在修改循环中的值。
猜你喜欢
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多