1

我意识到函数中的返回中断,因此我需要找到另一种方法来返回修改后的列表。

def multiply(lst):
    new = ''
    for i in range(len(lst)):
        var = lst[i] * 3
        new = new + str(var)
    return new
list1 = [1,2,3]
received = multiply(list1)
print [received]

我正在尝试将所有元素乘以 3 并返回(我必须使用返回)。这只是给回报

['369']

我要返回的列表是

[3,6,9]

4

4 回答 4

4

试试这个:

def multiply(lst):
    return [val*3 for val in lst]

list1 = [1,2,3]
received = multiply(list1)
print received

如果您想要就地编辑,您可以执行以下操作:

def multiply(lst):
    for idx,val in enumerate(lst):
        lst[idx] = val*3
    return lst

您的代码中的问题是您正在合并字符串“3”、“6”和“9”并返回一个包含字符串(“369”)的变量,而不是将这个字符串放入列表中。这就是为什么你有 ['369'] 而不是 [3,6,9]。请在下面的注释中找到你的代码:

def multiply(lst):
    new = '' # new string
    for i in range(len(lst)): # for index in range of list size
        var = lst[i] * 3 # get value from list and mupltiply by 3 and then assign to varible
        new = new + str(var) # append to string new string representation of value calculated in previous row
    return new #return string 

在任何情况下都是通过使用变量来调试代码的好方法——尽管如果你在代码中放置打印,你就会明白那里发生了什么

于 2012-11-23T06:28:19.210 回答
3

那是因为new不是列表。在第一行multiply(),你做new = ''。这意味着这new是一个字符串。

对于字符串,加法运算符+, 执行连接。也就是说:

'a' + 'b' => 'ab'

同样:

'1' + '2' => '12'

或者

new = ''
new + str(var) => '' + '3' => '3'

显然,这不是你想要的。为了做你想做的事,你应该构造一个列表并返回它:

def multiplyBy3(lst):
    newList = [] #create an empty list
    for i in range(len(lst)):
        newList.append(lst[i] * 3)
    return newList

当然,通过索引访问列表元素并不是很“pythonic”。经验法则是:“除非您需要知道列表元素的索引(在这种情况下您不需要),否则迭代列表的”。我们可以相应地修改上面的函数:

def multiplyBy3(lst):
    newList = [] 
    for item in lst: #iterate over the elements of the list
        newList.append(item * 3)
    return newList

最后,python 有一个叫做list comprehension的东西,它和上面做的一样,但是以更简洁(和更快)的方式。这是首选方法:

def multiplyBy3(lst):
    return [item * 3 for item in lst] #construct a new list of item * 3.

有关列表推导的更多信息,请参阅以下教程: http: //www.blog.pythonlibrary.org/2012/07/28/python-201-list-comprehensions/

于 2012-11-23T06:41:41.567 回答
0
>>> multiply = lambda l: map(lambda x: x*3, l)
>>> multiply([1,2,3])
[3, 6, 9]
于 2012-11-23T06:30:17.737 回答
0

工作轻松...

print [3 * x for x in [1, 2, 3]]
于 2012-11-23T06:36:24.833 回答