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

2024-12-12 08:40:00
admin
原创
141
摘要:问题描述:如何将列表中的所有字符串转换为整数?['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]

你可以笑,但是这有效。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1043  
  IPD(Integrated Product Development,集成产品开发)是一种系统化的产品开发方法论,旨在通过跨职能团队的协作,优化产品开发的效率和质量。IPD流程强调从市场需求出发,通过并行工程、跨部门协作和阶段性评审,确保产品从概念到上市的每个环节都高效且可控。随着敏捷开发方法的普及,越来越多的企业开始...
华为IPD流程   41  
  随着企业产品开发复杂度的提升以及市场需求的快速变化,传统的产品开发模式逐渐显现出局限性。集成产品开发(IPD)流程与敏捷开发(Agile Development)作为两种主流的开发方法论,分别从系统化管理和快速响应需求的角度为企业提供了解决方案。然而,单独使用其中一种方法往往无法完全满足企业在效率、质量和创新上的多重需...
华为IPD流程   35  
  华为IPD(Integrated Product Development,集成产品开发)流程是华为公司成功的关键因素之一。它不仅帮助华为在技术上实现了快速创新,还通过市场导向确保了产品的商业成功。IPD流程通过整合技术与市场双驱动,实现了从需求定义到产品交付的全生命周期管理。这种模式不仅提高了产品的开发效率,还降低了市...
IPD流程中PDCP是什么意思   32  
  在研发领域,集成产品开发(IPD)流程已经成为企业提升创新效率和市场竞争力的重要手段。然而,资源分配的不合理往往是制约IPD流程效率的关键因素之一。无论是人力资源、财务资源还是技术资源,如何高效分配直接关系到项目的成功与否。优化资源分配不仅能够缩短产品开发周期,还能降低研发成本,提升产品的市场竞争力。因此,掌握资源分配...
IPD流程中CDCP   34  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用