我想将列表中的所有数字更改为二次形式,我编写了代码,但它给出了错误。你怎么能决定?
numbers = list(range(1,11))
for number in numbers:
number = number **2
print(numbers)
我想将列表中的所有数字更改为二次形式,我编写了代码,但它给出了错误。你怎么能决定?
numbers = list(range(1,11))
for number in numbers:
number = number **2
print(numbers)
代码中有两个问题:
print(numbers)循环结束后显示列表内容fornumber = number **2不会更改列表的内容,而只是创建一个名为 的新变量number,该变量与列表无关。要更改列表,请使用按索引 (
a[i] = ...) 分配的方法.append(), .insert(), .remove(),....通常,这样的转换是在一行中使用列表生成器完成的:
几种变体:
与保罗略有不同的版本:
列表生成器的缺点是它会在内存中创建一个全新的列表。对于小型列表,这无关紧要,但对于大型结构,您将面临内存不足异常的风险。
我们稍微更改一下代码 - 我们将用圆括号替换方括号。
让我们得到一个生成器表达式,其中的元素是在访问它们的那一刻计算的。生成的生成器表达式可以在 for 循环中迭代或通过调用 next 方法进行迭代。这解决了上一段中列表生成器的问题——内存消耗。但是有一个 BUT:生成器表达式只能迭代一次。在示例代码中,生成器表达式被转换为列表(但可以是元组、集合或字典),这会导致元素自动迭代。
最后,使用 map 函数的变体。
或者更简单地说:
map函数返回一个迭代器对象,类似于第2点的生成器表达式。map函数的强大之处在于几乎任何函数,包括自写的,都可以逐个元素地应用于列表,几乎任何计算都可以清单上进行。顺便说一下,您可以一次处理多个列表。例如,让我们使用标准的求幂函数(您可以使用 numpy 或数学库中的类似函数):
最后,如果任务是替换原始列表的元素而不创建新元素(以节省内存):
或者立即:
或者像这样: