我有一个名为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?
答案 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])
您没有将该元素保存回列表