n = [3, 5, 7]
def double(lst):
for x in lst:
x *= 2
print x
return lst
print double(n)
为什么这个代码没有返回
n = [6, 10, 14]
?还应该有一个更好的解决方案,类似于
[x *=2 for x in lst]
,但它也无法正常工作。如果有关于for循环和列表的其他提示,将不胜感激。
n = [6, 10, 14]
?double
中,n
或者说内部称为lst
的变量从未被修改过。对于数字x
,x *= 2
相当于x = x * 2
,只是重新绑定了名称x
而没有改变它引用的对象。double
函数:def double(lst):
for i, x in enumerate(lst):
x *= 2
print("x = %s" % x)
print("lst[%d] = %s" % (i, lst[i]))
要原地修改一个数字列表,你需要重新分配它的元素:
def double(lst):
for i in xrange(len(lst)):
lst[i] *= 2
如果你不想就地修改它,请使用推导式:
def double(lst):
return [x * 2 for x in lst]
n = [3, 5, 7]
def double(lst):
for x in lst:
x *= 2
print x # item value changed and printed
return lst # original lst returned
print double(n)
[x *=2 for x in lst]
是错误的语法,正确的写法是 [x*2 for x in lst]
。
另一种方法是使用 map 和 lambda:print(list(map(lambda x:x*2,[1,2,3])))
print((lambda x:x*2)([1,2,3]))
会给出错误的答案,它输出[1, 2, 3, 1, 2, 3]
,就像执行[1,2,3]*2
一样。def double(lst):
return [i*2 for i in lst]
演示:
n = [3, 5, 7]
print(double(n))
输出:
[6, 10, 14]
print([1, 2]*4)
# [1, 2, 1, 2, 1, 2, 1, 2]
x
,但是修改x
并不会改变列表的元素。map(lambda(x):x*2, lst)
a_list = [2,3,4,5,10]
def double_ult(lst):
y = []
for i in range(len(lst)):
lst[i] *= 2
y += [lst[i]]
return y
print(double_ult(a_list))
b_list = [2,3,4,5,10]
def double_append(lst):
y = []
for i in lst:
lst = 2 * i
y.append(lst)
return y
print(double_append(b_list))
结果: [4, 6, 8, 10, 20]
输入代码:
n = [3, 5, 7]
n = [x*2 for x in n]
你也可以使用以下代码将列表中的元素翻倍:
a_list = [3, 5, 7]
multiplied_list = [element * 2 for element in a_list]
print(multiplied_list)
输出结果为:[6, 10, 14]