【问题标题】:How to extend a list continuously with a function in python?如何使用python中的函数连续扩展列表?
【发布时间】:2019-11-18 19:12:00
【问题描述】:

正如标题所说,我有一个问题是我无法执行一个函数,其中列表不断扩展到某个值。我需要这个来编写一个更大的程序。

这里有两个不起作用的例子。 第一个:

from random import *
import time

A = []

def list_expander(A):
    A = A + [randint(-5,5)]
    print (A)

while True:
    list_expander(A)
    time.sleep(2)

第二个:

from random import *
import time


def list_expander():
    A = []
    A = A + [randint(-5,5)]
    print (A)

while True:
    list_expander()
    time.sleep(2)

感谢您的帮助!

【问题讨论】:

  • 您的list_expander 函数不执行任何操作,它创建一个新列表,然后在函数终止后立即丢弃它。无论如何,你应该在这里使用.append。这就是它的用途。
  • list_expander 不会扩展列表,每次调用它都会重新初始化 A

标签: python list function repeat


【解决方案1】:

要修改不可变项(例如list),您可以使用其变异方法(在本例中为.append())。所以在你的第一个例子中,如果你用A.append(randint(-5, 5)) 替换A = A + [randint(-5,5)],你应该得到你想要的。您的第一个示例不起作用,因为该函数每次调用它时都会创建一个“新”A,它不会“更改”外部列表A。由于同样的原因,第二个显然也不起作用,而且它每次调用时都会用一个空列表重新初始化 A (A = [])。

总而言之,我会将您的代码重写为:

from random import randint
from time import sleep

A = []

def list_expander(A):
    A.append(randint(-5,5))
    print(A) # are you sure you need this?

while True:
    list_expander(A)
    time.sleep(2)

您可以阅读How do I pass a variable by reference? 以更好地理解为什么您的第一个示例不会更改列表A

【讨论】:

    【解决方案2】:
    from random import *
    import time
    def list_expander(A):
        A.append(randint(-5,5))
        print (A)
        return A
    A=[]
    while True:
        A=list_expander(A)
        time.sleep(2)
    
    
    

    【讨论】:

    • 我认为最好 list_expander() 将列表作为参数。
    【解决方案3】:

    据我了解,您希望继续追加到列表中,因此您必须返回它,以便您可以在下一次迭代中再次追加(扩展)它。

    from random import *
    import time
    
    def list_expander(A):
        A.append(randint(-5,5))
        print (A)
    
    A = []
    while True:
        list_expander(A)
        time.sleep(2)
        x+=1
    

    此代码将打印

    [1]
    [1, -5]
    [1, -5, 4]
    [1, -5, 4, 5]
    [1, -5, 4, 5, 2]
    

    您可以采取的另一种方法是将列表作为全局变量,但请记住这是吟游诗人的做法。

    【讨论】:

    • 我觉得没有必要return这个列表,可以简单的反复调用list_expander(a),列表就会扩大。另外,你有一个x+=1,它似乎什么也没做?
    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 2019-10-01
    • 2011-12-06
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    相关资源
    最近更新 更多