繁体   English   中英

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

[英]convert a list of strings list into integers

请问你能帮帮我吗? 我使用 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

感谢您的支持!

你实际上是在那里。 如果要处理嵌套列表,则需要嵌套循环

像这样的东西。

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

除了其他答案,您可以使用另一种方法:

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

看看ast模块

你可以这样做:

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

您的问题是ex是一个列表列表。 因此,如果您想将ex中的所有内容放入新列表中,则需要两个循环:

for i in x: 
    for j in i: 
        liste.append(int(j))

在我看来,这是执行速度最快,效率最高的方式,注意:如果你想要一个新的列表然后改变ex[:] = to liste =或者你想要调用你的变量,它会覆盖ex

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 list slice一起使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM