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 循环和列表的提示将不胜感激。

4

6 回答 6

13

为什么这不返回n = [6, 10, 14]

因为n,或者lst称为 inside double,永远不会被修改。x *= 2等效于x = x * 2for 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]
于 2013-07-15T17:06:42.097 回答
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-loop 来遍历列表的原因。

于 2013-07-15T17:06:32.720 回答
1

问题是你修改了x;但是,修改x不会更改列表的元素。

如果要将每个元素乘以 2,请使用 map:

map(lambda(x):x*2, lst)
于 2013-07-15T17:06:50.180 回答
0

列表理解解决方案看起来不同:

n = [3, 5, 7]
n = [x*2 for x in n]
于 2017-04-11T12:26:23.433 回答
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]

在此处输入代码

于 2021-01-28T19:03:30.830 回答
-1

您还可以使用此代码将列表中的元素加倍:

a_list = [3, 5, 7]

multiplied_list = [a_list 中元素的元素 * 2]

打印(multiplied_list)

输出 = [6, 10, 14

于 2021-02-25T11:04:51.390 回答