Python中将数字解析为点对象

2024-04-25 14:20:58 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
2条回答

您可以拆分空格上的字符串,然后压缩拆分列表中的备用元素。你知道吗

s = "0 1 2 3 4 5" 

x = s.split();
print(list(zip(x[::2], x[1::2])))

切片的第三个参数是步幅。因此,它从列表(0、2、4等)中选取第二个元素,第二个片段也是一个步长为2但从索引1(1、3、5等)开始的片段。你知道吗

list调用只用于强制立即计算print语句。如果您稍后将迭代返回值zip,则不需要使用它。你知道吗

上述输出tuples。如果你想把它们变成Point对象。你知道吗

points = [Point(*map(float,t)) for t in zip(x[::2], x[1::2])]
for p in points:
    print('%s' % p, end='')
print()

它看起来有点神奇,但本质上只是在循环中用每对值调用Point构造函数。map(float, t)部分将两个坐标转换为浮点值(我从您的__str__方法中推断出来),然后*将元组分解为构造函数的2个值。你知道吗

输出为

(0.000000, 1.000000)(2.000000, 3.000000)(4.000000, 5.000000)

你没有要求所有的尾随0,但是你的__str__正在打印浮动,所以我就这样留下了。你知道吗

在您的示例中,您还尝试使用print(points)直接打印列表本身。如果您希望每个列表项在这种情况下自定义打印本身,那么应该定义__repr__函数。你知道吗

points = [(tokens[i], tokens[i+1]) for i in range (0, len(tokens), 2)]

这将返回所需元组的列表。删除for循环;它包含在这个语句中(称为“列表理解”)。你知道吗

您可能会注意到点坐标仍然是字符串。您可能需要将元组中的两个项转换为int。你知道吗

相关问题 更多 >