将列表中的所有字符串转换为整数[重复]
- 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
返回的是一个列表:
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
它将应用于所有可迭代项。
请参阅下图了解map
Python 3.x 中函数的返回值及其类型
第三种方法是 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]
你可以笑,但是这有效。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)