在Python中,我想转换一个字符串列表:
l = ['sam','1','dad','21']
并将整数转换为整数类型,如下所示:
t = ['sam',1,'dad',21]
我试过了:
t = [map(int, x) for x in l]
但显示错误。
如何将列表中的所有 intable 字符串转换为int,将其他元素保留为字符串?
我的列表可能是多维的。适用于通用列表的方法更可取:
l=[['aa','2'],['bb','3']]
答案 0 :(得分:8)
我使用自定义功能:
def try_int(x):
try:
return int(x)
except ValueError:
return x
示例:
>>> [try_int(x) for x in ['sam', '1', 'dad', '21']]
['sam', 1, 'dad', 21]
编辑:如果您需要将上述内容应用于列表列表,为什么在构建嵌套列表时没有将这些字符串转换为int?
无论如何,如果你需要,只需要选择如何迭代这样的嵌套列表并应用上面的方法。
这样做的一种方法可能是:
>>> list_of_lists = [['aa', '2'], ['bb', '3']]
>>> [[try_int(x) for x in lst] for lst in list_of_lists]
[['aa', 2], ['bb', 3]]
您可以明确地将其重新分配给list_of_lists
:
>>> list_of_lists = [[try_int(x) for x in lst] for lst in list_of_lists]
答案 1 :(得分:3)
我会创建一个生成器来执行它:
def intify(lst):
for i in lst:
try:
i = int(i)
except ValueError:
pass
yield i
lst = ['sam','1','dad','21']
intified_list = list(intify(lst))
# or if you want to modify an existing list
# lst[:] = intify(lst)
如果您希望在列表列表中使用它,只需:
new_list_of_lists = map(list, map(intify, list_of_lists))
答案 2 :(得分:1)
如何使用map和lambda
>>> map(lambda x:int(x) if x.isdigit() else x,['sam','1','dad','21'])
['sam', 1, 'dad', 21]
或使用列表理解
>>> [int(x) if x.isdigit() else x for x in ['sam','1','dad','21']]
['sam', 1, 'dad', 21]
>>>
正如评论中所提到的,因为isdigit可能无法捕获负数,所以这里有一个精致的条件来处理它值得注意的是字符串是一个数字,如果它的字母数字而不是字母: - )
>>> [int(x) if x.isalnum() and not x.isalpha() else x for x in ['sam','1','dad','21']]
['sam', 1, 'dad', 21]
答案 3 :(得分:1)
对于multidimenson列表,使用递归技术可能有帮助。
from collections import Iterable
def intify(maybeLst):
try:
return int(maybeLst)
except:
if isinstance(maybeLst, Iterable) and not isinstance(lst, str):
return [intify(i) for i in maybeLst] # here we call intify itself!
else:
return maybeLst
maybeLst = [[['sam', 2],'1'],['dad','21']]
print intify(maybeLst)
答案 4 :(得分:0)
使用isdigit()
检查字符串中的每个字符以查看它是否为数字。
示例:
mylist = ['foo', '3', 'bar', '9']
t = [ int(item) if item.isdigit() else item for item in mylist ]
print(t)
答案 5 :(得分:0)
str.isnumeric
不会传递负号
str.lstrip
删除-
,选中.isnumeric
,然后转换为int
。str.isdigit
代替.isnumeric
。l = ['sam', '1', 'dad', '21', '-10']
t = [int(v) if v.lstrip('-').isnumeric() else v for v in l]
print(t)
>>> ['sam', 1, 'dad', 21, -10]
l = ['sam', '1', 'dad', '21', '-10']
t = [int(v) for v in t if v.lstrip('-').isnumeric()]
print(t)
>>> [1, 21, -10]
l = [['aa', '2'], ['bb', '3'], ['sam', '1', 'dad', '21', '-10']]
t = [[int(v) if v.lstrip('-').isnumeric() else v for v in x] for x in l]
print(t)
>>> [['aa', 2], ['bb', 3], ['sam', 1, 'dad', 21, -10]]