将字符串列表转换为整数列表

3

你好,我可以帮助您吗?我使用Python 3.x,想将变量ex转换为整数列表。

ex = [['2003', '12', '27', '7', '8646'],
      ['2003', '12', '28', '7', '7645'],
      ['2003', '12', '29', '2', '12823'],
      ['2003', '12', '30', '2', '14438'],
      ['2003', '12', '31', '3', '12374']]

我使用了这个函数,但它没有正常工作:

liste = []

def function_int(x):
    for i in x:
        liste.append(int[i])
    return liste

感谢您的支持!

1
首先,liste不应该是全局的。而且你知道你的输入是一个列表的列表吗?不仅仅是一个列表。你期望得到什么结果? - Jean-François Fabre
4个回答

3

你已经完成了一半的工作。如果想要处理嵌套列表,你需要使用嵌套循环

像这样:

def function_int(ex):
    liste = []
    for i in x:
        liste.append([])
        for j in i:
        liste[-1].append(int(i))

    return liste

在每一次外部迭代中,我们将下一个内部列表附加到我们的外部列表中。在每一次内部迭代中,将转换后的整数值附加到最近附加的内部列表中。
另外请注意,`int`是一个函数,需要用括号调用,而不是方括号。
或者,您也可以使用列表推导式完成这个操作。
liste = [[int(y) for y in x] for x in ex]

这种方法更加简洁,减少可读性的损失很小。
另一种可能性是在转换过程中出现ValueError。只有在使用嵌套循环代码时才能处理它们。你可以使用try-except来处理。
try:
    liste[-1].append(int(i))
except ValueError:
    pass

@coldspeed,非常感谢你。 这段代码打印出了我期望的结果:liste = [[int(y) for y in x] for x in ex] - Josh Bagwel
我是新来的,还不知道如何使用这个网站。我该如何投票?谢谢。 - Josh Bagwel
@JoshBagwel 为什么你取消了我的答案标记?请坚持只选择一个答案,除非它有问题。你不能接受多个答案。 - cs95

1

除了其他的答案,这里还有另一种方法可以使用:

integer_x = [list(map(int, each)) for each in x]
print(integer_x)

非常感谢您的帮助。 - Josh Bagwel
@JoshBagwel 没问题。很高兴能帮忙。如果你觉得有帮助,请不要忘记投票。 - Deepayan Ghosh

1

看一下ast模块

你可以这样做:

import ast
liste = []  
for l in ex:
   for i in range(len(l)):
      l[i] = ast.literal_eval(l[i])
   liste.append(l)

为什么在进行简单的整数转换时要使用如此沉重的模块? - cs95
这是一个内置模块,通常用于那些类型的事情。 - Simon Mengong
如果你让别人在 intast 中选择用于解析整数字符串表示的函数,几乎总是会得到 int 作为答案。 - cs95
当然!虽然这不是主题,但想象一下“ex”是一个字符串,你想将它转换为整数列表的列表,这就是“ast”的工作。 - Simon Mengong
你说得对。如果整个输入是一个字符串的话。;-) - cs95
@JoshBagwel 欢迎您 - Simon Mengong

0

在我看来,这是最快、最节省内存的方法。请注意:如果您想要一个新列表,请将ex[:] =更改为liste =或任何您想要命名的变量。

try:
    #check out this module for faster string checking
    from fastnumbers import *
except:
    pass

ex = [['2003', '12', '27', '7', '8646'],
      ['2003', '12', '28', '7', '7645'],
      ['2003', '12', '29', '2', '12823'],
      ['2003', '12', '30', '2', '14438'],
      ['2003', '12', '31', '3', '12374']]

ex[:] = [[int(e) if e.isdigit() else e for e in sl] for sl in ex]

结果:

for sublist in ex:
    print (sublist)

[2003, 12, 27, 7, 8646]
[2003, 12, 28, 7, 7645]
[2003, 12, 29, 2, 12823]
[2003, 12, 30, 2, 14438]
[2003, 12, 31, 3, 12374]

为了解释切片符号,尤其是在等号左边使用时,请参阅此问题:Python列表切片如何进行赋值操作

感谢 @new_to_code 的帮助。你的解决方案是另一种方式。 - Josh Bagwel

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