我意识到函数的返回中断因此我需要找到另一种方法来返回修改后的列表。
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并返回(我必须使用return)。这只是给出了回报
[ '369']
我想要返回的列表是
[3,6,9]
答案 0 :(得分: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
在任何情况下都是通过使用变量使用打印来调试代码的好方法 - 尽管如果你在代码中放置打印件,你将会理解那里的内容
答案 1 :(得分:3)
那是因为new
不是列表。在multiply()
的第一行,您执行new = ''
。这意味着new
是一个字符串。
对于字符串,加法运算符+
执行连接。也就是说:
'a' + 'b' => 'ab'
同样地:
'1' + '2' => '12'
或
new = ''
new + str(var) => '' + '3' => '3'
显然,这不是你想要的。为了做你想做的事,你应该构建一个 new 列表并将其返回:
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/
答案 2 :(得分:0)
>>> multiply = lambda l: map(lambda x: x*3, l)
>>> multiply([1,2,3])
[3, 6, 9]
答案 3 :(得分:0)
轻松工作......
print [3 * x for x in [1, 2, 3]]