为什么返回是列表中的项目,而不是列表itsef

时间:2018-06-11 04:31:59

标签: python

我在名为test.py的python(2.7版)文件中写了一个函数“getlist()”,如下所示:

d_list = []
def getlist(a):
    b = int(a) + 7
    c = [b, b + 9, b + 2*9, b + 3*9]
    for i in c:
        text = "%s" % i
        d_list.append(text)

    return d_list 

好消息是它可以很好地将列表作为回报,但坏消息是它会变得越来越大:

>>> import test
>>> test.getlist(1980)
['1987', '1996', '2005', '2014']
>>> test.getlist(1990)
['1987', '1996', '2005', '2014', '1997', '2006', '2015', '2024']

显然,返回的列表将包含已返回的所有内容。然后,我改变了这个想法的功能:给它一个条件,如果列表中有返回,只需先清除它们。更改后的代码如下:

d_list = []
def getlist(a):
    b = int(a) + 7
    c = [b, b + 9, b + 2*9, b + 3*9]
    for i in c:
        text = "%s" % i
    if d_list:
        d_list[:] = []
        d_list.append(text)

    else:
        d_list.append(text)

    return d_list

但现在,该功能无法按预期工作。例如:

>>> import test
>>> test.getlist(1980)
['2014']
>>> test.getlist(1990)
['2024']

它只返回列表的项目,它的最大值。我怎么能得到一个列表作为回报?谢谢。

3 个答案:

答案 0 :(得分:2)

这就是发明局部变量概念的原因。

def getlist(a):
    d_list = []
    b = int(a) + 7
    c = [b, b + 9, b + 2*9, b + 3*9]
    for i in c:
        text = "%s" % i
        d_list.append(text)

    return d_list 

答案 1 :(得分:1)

根据ravi的回答,您可以使用以下代码提高代码效率:

def getlist(a):
    d_list = []
    b = int(a) + 7
    d_list = [str(b), str(b + 9), str(b + 2*9), str(b + 3*9)]

    return d_list

str(b), str(b+9), etc...将您的值转换为字符串,因为它们放入列表中,这比使用c循环遍历for列表然后附加这些新值更有效到d_list

答案 2 :(得分:1)

这里的小猪支持就是使用python列表理解:

def getlist(a):
    b = int(a) + 7
    d_list = [str(b  + multiplier * 9) for multiplier in range(0,4)]
    return d_list