仅为isdigit从列表列表中将字符串更改为int

时间:2017-08-20 14:41:18

标签: python-3.x

我有一个名为rawSafirlistoflists的列表,我使用python 3,看起来像这样:

[['423523525', 'HOROS', 'WAFAD', ' 23523523523 - HOROD WAFAD', 'August', '2014', '540', '0', 'Ianuarie', '2015', '0', '0', 'RESTANTA_MANDAT', 'Mandat neachitat NAM', '', 'AJUTOR REFUGIATI', 'INCLUS_IN_PLATA', ''], ['5235232', 'STOICOVICIDF', 'PAULADD ANDREEAD', ' 52352352352 - STOICOVICIDE PAULF CRISTIAN', 'August', '2014', '42', '0', 'Februarie', '2015', '0', '0', 'RESTANTA_MANDAT', '', '', 'ALOCATIA DE STAT PENTRU COPII', 'INCLUS_IN_PLATA', '']]

我想迭代并仅将现在为string的数字转换为int。 这是我的代码:

for level1 in rawSafirlistoflists:
for level2 in level1:
    if level2.isdigit():
        int(level2)
        print(level2)
print (rawSafirlistoflists)

当我打印level2时,我看到if找到了正确的字符串(那些是数字)并按照我的意愿将它们转换为int,但它没有保存更改。我在打印列表时遇到的问题rawSafirlistoflists值没有改变(所有索引都是字符串),如何在if语句中推送修改,以使值保持为int?

3 个答案:

答案 0 :(得分:3)

使用str.isdigit是正确的方法,但int(level2)无效(有用)。对int的调用返回一个整数值,然后丢弃该值,它不会改变字符串level2。 (事实上​​,字符串上没有任何变异方法。)

为了修复您的方法(在修复缩进之后),创建一个新列表,您将调用的返回值追加到int(或原始值,以防str.isdigit返回{ {1}})。

这也可以通过如下列表理解来完成。

False

答案 1 :(得分:2)

您可以使用list comprehension

执行此操作
result = [int(j) if j.isdigit() else j for i in a for j in i]

假设a为您的输入。

执行:

In [20]: result = [int(j) if j.isdigit() else j for i in a for j in i]

In [21]: print result
[423523525, 'HOROS', 'WAFAD', ' 23523523523 - HOROD WAFAD', 'August', 2014, 540, 0, 'Ianuarie', 2015, 0, 0, 'RESTANTA_MANDAT', 'Mandat neachitat NAM', '', 'AJUTOR REFUGIATI', 'INCLUS_IN_PLATA', '', 5235232, 'STOICOVICIDF', 'PAULADD ANDREEAD', ' 52352352352 - STOICOVICIDE PAULF CRISTIAN', 'August', 2014, 42, 0, 'Februarie', 2015, 0, 0, 'RESTANTA_MANDAT', '', '', 'ALOCATIA DE STAT PENTRU COPII', 'INCLUS_IN_PLATA', '']

答案 2 :(得分:-1)

这应该有效:

for index in range(len(list)):
    for index2 in range(len(list[index])):
        if list[index][index2].isdigit():
             list[index][index2] = int (list[index][index2])

您没有将该元素保存回列表