是否有打开Python列表并同时转换为int的方法



我有这个片段:

s = "A 1 B 2"
a, a1, b, b1 = s.split()
a1 = int(a1)
b1 = int(b1)

我想知道是否有开箱并同时转换为int或其他任何东西。我也可以把这个片段写如下:

s = "A 1 B 2"
a, a1, b, b1 = (int(x) if i in (1, 3) else i, x for x in enumerate(s.split()))

但我想知道是否有一个较短的版本。类似的东西

a, int(a1), b, int(b1) = s.split()

这将使类似的事情也成为可能:

s = "A 1 B 2.3"
a, int(a1), b, float(b1) = s.split()

假设这是您的数据和数据类型:

# data and datatypes
t = 'a 1 2.4 b'
dtypes = [str, int, float, str]
a, a1, b, b1 = [dtypes[i](n) for i, n in enumerate(t.split())]

您可以创建一个;通用的";转换器:

def converter(s):
"""Attempts to convert to int, float or returns a string"""
try:
return int(s)
except ValueError:
try:
return float(s)
except ValueError:
return s

s = "A 1 B 3.141"
a,b,c,d = map(converter, s.split())  # apply function to all splitted things
# print values and its types
print(a, b, c, d, *map(type, (a,b,c,d)))

输出:

A 1 B 3.141 <class 'str'> <class 'int'> <class 'str'> <class 'float'>

但是:

这将为每个列表成员最多执行3次转换尝试,您需要在字符串中正好有4个内容,而且总的来说,它不太可重用。如果插入'A B C D',它将尝试4次int转换和4次float转换,以获得4个字符串。

你能做到吗?对应该吗?我有我的疑虑。

最新更新