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

2024-12-12 08:40:00
admin
原创
143
摘要:问题描述:如何将列表中的所有字符串转换为整数?['1', '2', '3'] ⟶ [1, 2, 3] 解决方案 1:鉴于:xs = ['1', '2', '3'] map然后使用list获取整数列表:list(map(int, xs)) 在 Python 2 中,list没有必要,因为map返回的是一个列...

问题描述:

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

['1', '2', '3']  ⟶  [1, 2, 3]

解决方案 1:

鉴于:

xs = ['1', '2', '3']

map然后使用list获取整数列表:

list(map(int, xs))

在 Python 2 中,list没有必要,因为map返回的是一个列表:

map(int, xs)

解决方案 2:

在列表中使用列表推导xs

[int(x) for x in xs]

例如

>>> xs = ["1", "2", "3"]
>>> [int(x) for x in xs]
[1, 2, 3]

解决方案 3:

有几种方法可以将列表中的字符串数字转换为整数。

在 Python 2.x 中,你可以使用map函数:

>>> results = ['1', '2', '3']
>>> results = map(int, results)
>>> results
[1, 2, 3]

这里,它返回应用函数后的元素列表。

在 Python 3.x 中,你可以使用相同的映射

>>> results = ['1', '2', '3']
>>> results = list(map(int, results))
>>> results
[1, 2, 3]

与 python 2.x 不同,这里的 map 函数将返回 map 对象,即iterator它将逐个产生结果(值),这就是为什么我们需要进一步添加一个名为的函数,list它将应用于所有可迭代项。

请参阅下图了解mapPython 3.x 中函数的返回值及其类型

map 函数迭代器对象及其类型

第三种方法是 Python 2.x 和 Python 3.x 中通用的,即列表推导

>>> results = ['1', '2', '3']
>>> results = [int(i) for i in results]
>>> results
[1, 2, 3]

解决方案 4:

您可以使用 Python 中的循环简写轻松地将字符串列表项转换为 int 项

假设你有一个字符串result = ['1','2','3']

就这么做吧,

result = [int(item) for item in result]
print(result)

它会给你类似的输出

[1,2,3]

解决方案 5:

如果您的列表包含纯整数字符串,则接受的答案是正确的。如果您给它不是整数的东西,它会崩溃。

因此:如果您的数据可能包含整数、浮点数或其他内容,您可以利用自己的函数进行错误处理:

def maybeMakeNumber(s):
    """Returns a string 's' into a integer if possible, a float if needed or
    returns it as is."""

    # handle None, "", 0
    if not s:
        return s
    try:
        f = float(s)
        i = int(f)
        return i if f == i else f
    except ValueError:
        return s

data = ["unkind", "data", "42", 98, "47.11", "of mixed", "types"]

converted = list(map(maybeMakeNumber, data))
print(converted)

输出:

['unkind', 'data', 42, 98, 47.11, 'of mixed', 'types']

要处理可迭代对象中的可迭代对象,您可以使用这个帮助程序:

from collections.abc import Iterable, Mapping

def convertEr(iterab):
    """Tries to convert an iterable to list of floats, ints or the original thing
    from the iterable. Converts any iterable (tuple,set, ...) to itself in output.
    Does not work for Mappings  - you would need to check abc.Mapping and handle 
    things like {1:42, "1":84} when converting them - so they come out as is."""

    if isinstance(iterab, str):
        return maybeMakeNumber(iterab)

    if isinstance(iterab, Mapping):
        return iterab

    if isinstance(iterab, Iterable):
        return  iterab.__class__(convertEr(p) for p in iterab)


data = ["unkind", {1: 3,"1":42}, "data", "42", 98, "47.11", "of mixed", 
        ("0", "8", {"15", "things"}, "3.141"), "types"]

converted = convertEr(data)
print(converted)

输出:

['unkind', {1: 3, '1': 42}, 'data', 42, 98, 47.11, 'of mixed', 
 (0, 8, {'things', 15}, 3.141), 'types'] # sets are unordered, hence diffrent order

解决方案 6:

比列表推导稍微扩展一点,但同样有用:

def str_list_to_int_list(str_list):
    n = 0
    while n < len(str_list):
        str_list[n] = int(str_list[n])
        n += 1
    return(str_list)

例如

>>> results = ["1", "2", "3"]
>>> str_list_to_int_list(results)
[1, 2, 3]

还:

def str_list_to_int_list(str_list):
    int_list = [int(n) for n in str_list]
    return int_list

解决方案 7:

在输入时您只需一行即可完成此操作。

[int(i) for i in input().split("")]

按照您想要的位置进行分割。

如果您想要转换列表(而不是列表),只需将列表名称放在 的位置即可input().split("")

解决方案 8:

这是一个简单的解决方案,并对您的查询进行了解释。

 a=['1','2','3','4','5'] #The integer represented as a string in this list
 b=[] #Fresh list
 for i in a: #Declaring variable (i) as an item in the list (a).
     b.append(int(i)) #Look below for explanation
 print(b)

这里,append()用于将项目(即该程序中的字符串(i)的整数版本)添加到列表(b)的末尾。

注意:int()是一个函数,可以帮助将字符串形式的整数转换回其整数形式。

输出控制台:

[1, 2, 3, 4, 5]

因此,只有当给定的字符串完全由数字组成时,我们才能将列表中的字符串项转换为整数,否则会产生错误。

解决方案 9:

强制无效输入

int()如果输入了无效值,则会引发错误。如果您想将这些无效值设置为 NaN 并转换列表中的有效值(类似于 pandas 的to_numeric行为方式),您可以使用以下列表推导来实现:

[int(x) if x.replace('-','', 1).replace('+','',1).isdecimal() else float('nan') for x in lst]

它本质上是检查一个值是否为十进制(负数或正数)。科学计数法(例如1e3)也可以是有效的整数,在这种情况下,我们可以向理解中添加另一个条件(尽管不太清晰):

[int(x) if x.replace('-','', 1).replace('+','',1).isdecimal() else int(e[0])*10**int(e[1]) if (e:=x.split('e',1))[1:] and e[1].isdecimal() else float('nan') for x in lst]

对于lst = ['+1', '2', '-3', 'string', '4e3'],上述推导式返回[1, 2, -3, nan, 4000]。稍加调整,我们也可以让它处理浮点数,但那是另一个话题。

map() 比列表推导更快

map()比列表推导快约 64%。从下面的性能图中可以看出,map()无论列表大小如何,其性能都优于列表推导。

水库

用于生成图表的代码:

from random import choices, randint
from string import digits
from perfplot import plot
plot(
    setup=lambda n: [''.join(choices(digits, k=randint(1,10))) for _ in range(n)],
    kernels=[lambda lst: [int(x) for x in lst], lambda lst: list(map(int, lst))],
    labels= ["[int(x) for x in lst]", "list(map(int, lst))"],
    n_range=[2**k for k in range(4, 22)],
    xlabel='Number of items',
    title='Converting strings to integers',
    equality_check=lambda x,y: x==y);

解决方案 10:

我还想添加Python | 将列表中的所有字符串转换为整数

方法 1:简单方法

# Python3 code to demonstrate 
# converting list of strings to int 
# using naive method 

# initializing list 
test_list = ['1', '4', '3', '6', '7'] 

# Printing original list 
print ("Original list is : " + str(test_list)) 

# using naive method to 
# perform conversion 
for i in range(0, len(test_list)): 
    test_list[i] = int(test_list[i]) 
    

# Printing modified list 
print ("Modified list is : " + str(test_list)) 

输出:

Original list is : ['1', '4', '3', '6', '7']
Modified list is : [1, 4, 3, 6, 7]

方法 2:使用列表推导

# Python3 code to demonstrate 
# converting list of strings to int 
# using list comprehension 

# initializing list 
test_list = ['1', '4', '3', '6', '7'] 

# Printing original list 
print ("Original list is : " + str(test_list)) 

# using list comprehension to 
# perform conversion 
test_list = [int(i) for i in test_list] 
    

# Printing modified list 
print ("Modified list is : " + str(test_list)) 

输出:

Original list is : ['1', '4', '3', '6', '7']
Modified list is : [1, 4, 3, 6, 7]

方法 3:使用 map()

# Python3 code to demonstrate 
# converting list of strings to int 
# using map() 

# initializing list 
test_list = ['1', '4', '3', '6', '7'] 

# Printing original list 
print ("Original list is : " + str(test_list)) 

# using map() to 
# perform conversion 
test_list = list(map(int, test_list)) 
    

# Printing modified list 
print ("Modified list is : " + str(test_list)) 

输出:

Original list is : ['1', '4', '3', '6', '7']
Modified list is : [1, 4, 3, 6, 7]

解决方案 11:

下面的答案,即使是最受欢迎的答案,也不适用于所有情况。我有一个针对超抗推力 str 的解决方案。我遇到过这样的事情:

AA = ['0', '0.5', '0.5', '0.1', '0.1', '0.1', '0.1']

AA = pd.DataFrame(AA, dtype=np.float64)
AA = AA.values.flatten()
AA = list(AA.flatten())
AA

[0.0, 0.5, 0.5, 0.1, 0.1, 0.1, 0.1]

你可以笑,但是这有效。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1048  
  在产品开发领域,如何提升产品交付质量一直是企业关注的焦点。集成产品开发(IPD)作为一种系统化的产品开发方法,通过跨职能团队的协同、流程的优化以及资源的整合,能够有效提升产品的交付质量。IPD培训作为推动这一方法落地的重要工具,不仅能够帮助团队理解IPD的核心原则,还能通过实践和案例学习,提升团队的执行力和协作效率。本...
IPD研发管理体系   0  
  在现代企业中,跨部门合作已成为项目成功的关键因素之一。随着业务复杂性的增加,单一部门难以独立完成复杂的项目任务,因此需要多个部门的协同努力。然而,跨部门合作往往面临沟通不畅、职责不清、资源冲突等挑战,这些问题如果得不到有效解决,将直接影响项目的进度和质量。在这种背景下,IPD(集成产品开发)项目流程图作为一种系统化的管...
华为IPD流程   0  
  在研发IPD(集成产品开发)流程中,跨部门协作是确保项目成功的关键因素之一。IPD流程强调从概念到市场的全生命周期管理,涉及市场、研发、制造、供应链等多个部门的协同工作。然而,由于各部门的目标、工作方式和优先级不同,跨部门协作往往面临沟通不畅、资源冲突、决策延迟等挑战。为了应对这些挑战,企业需要采取系统化的方法,优化跨...
IPD概念阶段   0  
  在项目管理的生命周期中,CDCP(Concept Development and Control Plan)阶段是项目从概念到实施的关键过渡期。这一阶段不仅需要明确项目的目标和范围,还需要确保项目团队能够灵活应对可能出现的变更和调整。变更管理在这一阶段尤为重要,因为任何未经控制的变更都可能对项目的进度、成本和质量产生深...
IPD流程中TR   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用