如何将列表中的所有值加倍

4
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循环和列表的其他提示,将不胜感激。
7个回答

13
为什么这个函数不会返回 n = [6, 10, 14]
因为在函数 double 中,n或者说内部称为lst的变量从未被修改过。对于数字xx *= 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]

3
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)

您只修改了列表中的项目值并打印了其数字,但返回原始lst列表。 [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一样。

2
你可以使用列表推导式来实现: 功能:
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循环来遍历列表的原因。

1
问题在于你修改了x,但是修改x并不会改变列表的元素。
如果你想将每个元素乘以二,使用map函数:
map(lambda(x):x*2, lst)

我还没弄清楚如何使用map。不过还是谢谢。 - jane
基本上,你将函数应用于列表的每个元素。函数是“map”的第一个参数,列表在第二个参数中。 - jh314
我建议使用列表推导式来解决所提出的问题,这是更符合Python风格的方法。 - jwpfox

0
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]

输入代码:


0
列表推导式的解决方案看起来不同:
n = [3, 5, 7]
n = [x*2 for x in n]

-1

你也可以使用以下代码将列表中的元素翻倍:

a_list = [3, 5, 7]

multiplied_list = [element * 2 for element in a_list]

print(multiplied_list)

输出结果为:[6, 10, 14]


1
欢迎来到StackOverflow!这个解决方案已经在其他答案中提出,包括被接受的答案。在发布之前,请确保您的贡献为问题或答案增添了新的内容。 - Sergey Shubin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接