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]
?
因为n
,或者lst
称为 inside double
,永远不会被修改。x *= 2
等效于x = x * 2
for numbers x
,并且仅重新绑定名称 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]
您可以为此使用列表推导:
功能:
def double(lst):
return [i*2 for i in lst]
演示:
n = [3, 5, 7]
print(double(n))
输出:
[6, 10, 14]
在 python 中,将列表本身相乘将产生:
print([1, 2]*4)
# [1, 2, 1, 2, 1, 2, 1, 2]
因此,您需要将列表中的项目相乘,这就是您首先使用 for-loop 来遍历列表的原因。
问题是你修改了x
;但是,修改x
不会更改列表的元素。
如果要将每个元素乘以 2,请使用 map:
map(lambda(x):x*2, lst)
列表理解解决方案看起来不同:
n = [3, 5, 7]
n = [x*2 for x in n]
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))
结果:[4、6、8、10、20]
使用 .append() 方法:
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]
在此处输入代码
您还可以使用此代码将列表中的元素加倍:
a_list = [3, 5, 7]
multiplied_list = [a_list 中元素的元素 * 2]
打印(multiplied_list)
输出 = [6, 10, 14