如何将列表列表中的所有字符串转换为整数?[重复]

2024-12-19 09:23:00
admin
原创
67
摘要:问题描述:我有一个包含字符串的元组的元组:T1 = (('13', '17', '18', '21', '32'), ('07', '11', '13', '14', '28'), ('01', '05', '06', '08', '15', '16')) 我想将所有字符串元素转换为整...

问题描述:

我有一个包含字符串的元组的元组:

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]构建lists 。外部列表推导 ( ) 构建一个列表,其中包含对 中的每个项目应用内部列表推导的结果。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)  
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   990  
  在项目管理领域,CDCP(Certified Data Center Professional)认证评审是一个至关重要的环节,它不仅验证了项目团队的专业能力,还直接关系到项目的成功与否。在这一评审过程中,沟通技巧的运用至关重要。有效的沟通不仅能够确保信息的准确传递,还能增强团队协作,提升评审效率。本文将深入探讨CDCP...
华为IPD流程   26  
  IPD(Integrated Product Development,集成产品开发)是一种以客户需求为核心、跨部门协同的产品开发模式,旨在通过高效的资源整合和流程优化,提升产品开发的成功率和市场竞争力。在IPD培训课程中,掌握关键成功因素是确保团队能够有效实施这一模式的核心。以下将从五个关键成功因素展开讨论,帮助企业和...
IPD项目流程图   27  
  华为IPD(Integrated Product Development,集成产品开发)流程是华为公司在其全球化进程中逐步构建和完善的一套高效产品开发管理体系。这一流程不仅帮助华为在技术创新和产品交付上实现了质的飞跃,还为其在全球市场中赢得了显著的竞争优势。IPD的核心在于通过跨部门协作、阶段性评审和市场需求驱动,确保...
华为IPD   26  
  华为作为全球领先的通信技术解决方案提供商,其成功的背后离不开一套成熟的管理体系——集成产品开发(IPD)。IPD不仅是一种产品开发流程,更是一种系统化的管理思想,它通过跨职能团队的协作、阶段评审机制和市场需求驱动的开发模式,帮助华为在全球市场中脱颖而出。从最初的国内市场到如今的全球化布局,华为的IPD体系在多个领域展现...
IPD管理流程   53  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用