如何将列表列表中的所有字符串转换为整数?[重复]
- 2024-12-19 09:23:00
- admin 原创
- 66
问题描述:
我有一个包含字符串的元组的元组:
T1 = (('13', '17', '18', '21', '32'),
('07', '11', '13', '14', '28'),
('01', '05', '06', '08', '15', '16'))
我想将所有字符串元素转换为整数,然后将它们放回列表列表中:
T2 = [[13, 17, 18, 21, 32],
[7, 11, 13, 14, 28],
[1, 5, 6, 8, 15, 16]]
解决方案 1:
int()
是 Python 标准内置函数,用于将字符串转换为整数值。您可以使用包含数字的字符串作为参数来调用它,它会返回转换为整数的数字:
>>> int("1") + 1
2
如果你知道列表 T1 的结构(它仅包含列表,只有一个级别),你可以在 Python 3 中执行以下操作:
T2 = [list(map(int, x)) for x in T1]
在 Python 2 中:
T2 = [map(int, x) for x in T1]
解决方案 2:
您可以使用列表推导来做到这一点:
T2 = [[int(column) for column in row] for row in T1]
内部列表推导 ( )从 中的一系列-able 对象(如十进制字符串)[int(column) for column in row]
构建list
s 。外部列表推导 ( ) 构建一个列表,其中包含对 中的每个项目应用内部列表推导的结果。int
`introw
[... for row in T1])`T1
如果任何行包含无法通过 转换的对象,则代码片段将失败int
。如果要处理包含非十进制字符串的行,则需要一个更智能的函数。
如果您知道行的结构,则可以用对行函数的调用替换内部列表理解。例如。
T2 = [parse_a_row_of_T1(row) for row in T1]
解决方案 3:
仅使用列表推导:
[[int(y) for y in x] for x in T1]
解决方案 4:
不要放入int( )
,而是放入 ,float( )
这样您就可以将小数和整数一起使用。
解决方案 5:
我同意到目前为止每个人的回答,但问题是,如果你没有所有的整数,它们就会崩溃。
如果你想排除非整数,那么
T1 = (('13', '17', '18', '21', '32'),
('07', '11', '13', '14', '28'),
('01', '05', '06', '08', '15', '16'))
new_list = list(list(int(a) for a in b) for b in T1 if a.isdigit())
这只会产生实际数字。我不使用直接列表推导的原因是列表推导会泄露其内部变量。
解决方案 6:
T3=[]
for i in range(0,len(T1)):
T3.append([])
for j in range(0,len(T1[i])):
b=int(T1[i][j])
T3[i].append(b)
print T3
解决方案 7:
尝试一下。
x = "1"
x 是一个字符串,因为它两边有引号,但里面有一个数字。
x = int(x)
由于 x 中包含数字 1,因此我可以将其转换为整数。
要查看字符串是否是数字,您可以这样做。
def is_number(var):
try:
if var == int(var):
return True
except Exception:
return False
x = "1"
y = "test"
x_test = is_number(x)
print(x_test)
它应该打印为 IDLE True 因为 x 是一个数字。
y_test = is_number(y)
print(y_test)
它应该打印到 IDLE False,因为 y 不是数字。
解决方案 8:
使用列表推导:
t2 = [map(int, list(l)) for l in t1]
解决方案 9:
参见这个函数
def parse_int(s):
try:
res = int(eval(str(s)))
if type(res) == int:
return res
except:
return
然后
val = parse_int('10') # Return 10
val = parse_int('0') # Return 0
val = parse_int('10.5') # Return 10
val = parse_int('0.0') # Return 0
val = parse_int('Ten') # Return None
您还可以查看
if val == None: # True if input value can not be converted
pass # Note: Don't use 'if not val:'
解决方案 10:
Python 2 的另一个实用解决方案:
from functools import partial
map(partial(map, int), T1)
但是 Python 3 会稍微有点混乱:
list(map(list, map(partial(map, int), T1)))
我们可以用包装器解决这个问题
def oldmap(f, iterable):
return list(map(f, iterable))
oldmap(partial(oldmap, int), T1)
解决方案 11:
如果它只是元组的元组,那么类似的东西rows=[map(int, row) for row in rows]
就可以解决问题。(其中有一个列表理解和一个对 map(f, lst) 的调用,它等于 [f(a) for a in lst]。)
如果出于某种原因您的数据库中存在类似内容,则Eval不是__import__("os").unlink("importantsystemfile")
您想要执行的操作。始终验证您的输入(如果没有其他操作,如果您的输入不正确,则会引发 int() 异常)。
解决方案 12:
在 Python 3.5.1 中,类似下面的操作可以工作:
c = input('Enter number:')
print (int(float(c)))
print (round(float(c)))
和
Enter number: 4.7
4
5
解决方案 13:
Python 内置了函数 int(string) 和可选参数 base。
如果字符串包含整数值,它会将其转换为相应的整数值。但是,如果字符串中包含十进制数,则需要使用 float() 进行转换。
用法:
a = '22'
b = int(a)
和
if a = '22.22'
b = int(a) '''will give error, invalid literal for int().'''
b = float(a) '''will convert the string.'''
解决方案 14:
你可以做这样的事情:
T1 = (('13', '17', '18', '21', '32'),
('07', '11', '13', '14', '28'),
('01', '05', '06', '08', '15', '16'))
new_list = list(list(int(a) for a in b if a.isdigit()) for b in T1)
print(new_list)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件