Python:元组赋值,同时转换类型

时间:2015-05-04 06:33:54

标签: python floating-point type-conversion tuples

我正在将字符串中的制表符分隔值读取到这样的对象中:

class Node(rect):
    def __init__(self, line):
        (self.id, self.x1, self.y1, self.x2, self.y2) = line.split('\t')

工作正常,但是我想将那些从字符串line读取的x和y坐标转换为浮点数。什么是最pythonic的方式来做到这一点?我想像

这样的东西
(self.id, float(self.x1), float(self.y1), float(self.x2), float(self.y2)) = line.split('\t')

当然不起作用。有没有一种优雅的方法来做到这一点,或者我必须像self.x1 = float(self.x1)一样手动转换?

3 个答案:

答案 0 :(得分:6)

您不能在一行上执行此操作,但您可以执行以下操作:

self.id, *rest = line.split('\t')
self.x1, self.y1, self.x2, self.y2 = map(float, rest)

如果您使用的是python2,那么您必须这样做:

splitted = line.split('\t')
self.id = splitted.pop(0)
self.x1, self.y1, self.x2, self.y2 = map(float, splitted)

答案 1 :(得分:3)

我自己多次问过这个问题。

我想出的最好的方法是定义一个输入转换函数列表,然后用参数压缩它们:

identity = lambda x: x
input_conversion = [identity, float, float, float, float]
self.id, self.x1, self.y1, self.x2, self.y2 = (
  f(x) for f, x in zip(input_conversion, line.split('\t')))

答案 2 :(得分:1)

你无法做任何类似于你尝试做的事情。但也有选择。

在这种情况下,您尝试将第一个值转换为float。你可以这样做:

bits = line.split('\t')
self.id = bits.pop()
self.x1, self.y1, self.x2, self.y2 = map(float, bits)