我有一个包含数字字符串的列表,如下所示:

numbers = ['1', '5', '10', '8'];

我想把每个列表元素都转换成整数,所以它看起来像这样:

numbers = [1, 5, 10, 8];

我可以用循环来做,像这样:

new_numbers = [];
for n in numbers:
    new_numbers.append(int(n));
numbers = new_numbers;

非得这么难看吗?我相信有一种更python化的方法可以在一行代码中实现这一点。请帮帮我。


当前回答

在Python 2中。X另一种方法是使用map:

numbers = map(int, numbers)

注意:在Python 3中。X map返回一个映射对象,你可以转换为一个列表,如果你想:

numbers = list(map(int, numbers))

其他回答

这就是列表推导式的作用:

numbers = [ int(x) for x in numbers ]

在Python 2中。X另一种方法是使用map:

numbers = map(int, numbers)

注意:在Python 3中。X map返回一个映射对象,你可以转换为一个列表,如果你想:

numbers = list(map(int, numbers))

在Python 3中另一种方法是:

数字= [*map(int, Numbers)]

然而,理想情况下,你可能只满意map,因为它返回一个迭代器:

Numbers = map(int, Numbers)

如果你打算把这些整数传递给一个函数或方法,考虑下面的例子:

sum(int(x) for x in numbers)

这种结构有意地与adamk提到的列表理解式非常相似。如果没有方括号,它被称为生成器表达式,并且是将参数列表传递给方法的一种非常节省内存的方式。这里有一个很好的讨论:生成器表达式vs.列表理解

可能还值得注意的是,NumPy在创建数组时会动态地执行此操作:

import numpy as np

numbers = ['1', '5', '10', '8']
numbers = np.array(numbers,
                   dtype=int)
numbers
array([ 1,  5, 10,  8])