在每个列表元素上调用int()函数?

Sil*_*ght 172 python list

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

numbers = ['1', '5', '10', '8'];
Run Code Online (Sandbox Code Playgroud)

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

numbers = [1, 5, 10, 8];
Run Code Online (Sandbox Code Playgroud)

我可以使用循环来完成它,如下所示:

new_numbers = [];
for n in numbers:
    new_numbers.append(int(n));
numbers = new_numbers;
Run Code Online (Sandbox Code Playgroud)

它必须如此丑陋吗?我确信在一行代码中有更多的pythonic方法可以做到这一点.请帮帮我.

ada*_*amk 337

这就是列表推导的用途:

numbers = [ int(x) for x in numbers ]
Run Code Online (Sandbox Code Playgroud)

  • 向我显示无效的语法 (2认同)

Mar*_*ers 127

在Python 2.x中,另一种方法是使用map:

numbers = map(int, numbers)
Run Code Online (Sandbox Code Playgroud)

注意:在Python 3.x中map返回一个地图对象,如果需要,可以将其转换为列表:

numbers = list(map(int, numbers))
Run Code Online (Sandbox Code Playgroud)

  • 在Python 3.x中,`map`返回迭代器而不是列表,因此如果需要列表,则需要将其写为`list(map(int,numbers))`. (10认同)
  • 用Python 2.7.2测量时间:LC:3.578153133392334,地图:4.9065070152282715 (4认同)
  • @extraneon:是的......或者可能考虑使用生成器代替列表,具体取决于您将使用它.发电机的优点是,如果您可能不需要查看所有元素,那么您不必浪费时间提前计算它们. (3认同)
  • 我认为目前列表理解方法更受青睐. (2认同)

ren*_*opp 20

只是一点,

numbers = [int(x) for x in numbers]
Run Code Online (Sandbox Code Playgroud)

列表理解更自然,而

numbers = map(int, numbers)
Run Code Online (Sandbox Code Playgroud)

是比较快的.

在大多数情况下,这可能无关紧要

有用的阅读:LP与地图

  • 不应该是number = map(int,number)? (6认同)

Tim*_*ara 9

如果您打算将这些整数传递给函数或方法,请考虑以下示例:

sum(int(x) for x in numbers)
Run Code Online (Sandbox Code Playgroud)

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


Art*_*kov 5

在 Python 3 中实现它的另一种方法:

numbers = [*map(int, numbers)]


归档时间:

查看次数:

224153 次

最近记录:

7 年,5 月 前