将元组列表格式化为小数,并将它们添加到fi中

2024-09-21 01:28:06 发布

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

我有一个元组列表作为坐标(必须是这样)

points = [(x1, y1), (x2, y2), ...]

在matplotlib中绘制多边形。为了得到这些坐标,我首先创建了一个空列表points = [],然后编写了一个函数,从中心坐标、边数、边长和旋转角度计算每个点。函数完成后,我编写了一个代码,从用户的输入中读取上述初始值并检查其有效性,如果检查成功,则调用该函数。在

现在我想在文件中存储坐标和点数,如下所示:

点数
x1,y1
x2,y2

xn,yn

其中每个坐标都写在小数点后3位。因此,我需要将元组格式化为3个小数,然后将它们转换为字符串,然后将它们写入一个文件中,我希望以最短的方式完成。在

我想我应该做一些类似lines = [float("{:.3f}".format(j)) for j in points](因为我有元组,所以不起作用),然后

^{pr2}$

上面的解决方案对我来说似乎很好,但是我找不到一种方法来完成元组的第一行(格式化为小数),所以我想知道如何将元组列表格式化为小数,以将它们存储在一个列表中以供后续使用writelines并转换成字符串? 或者,如果有一个更短更好的方法,我会很感激任何提示。谢谢您!在


Tags: 文件方法函数字符串列表matplotlib绘制points
3条回答

你在混合几种东西。不需要在列表中添加数字,也不需要创建中间字符串列表。还有格式设置如下所示:

with open('points.txt', 'w') as f:
    f.write(str(len(points)))
    for x, y in points:
        f.write(f"{x:.2f}, {y:.2f}\n")

构造行时使用元组解包:

lines = ["{:.3f}, {:.3f}\n".format(*point) for point in points]

这样你就已经有了一个可以很容易地写入文件的字符串列表。不需要再次将它们转换为float,只需再次将它们转换为字符串。在

^{pr2}$

您可以直接将浮动写入文件:

测试数据:

import random

tupledata = [(random.uniform(-5,5),random.uniform(-5,5) ) for _ in range(10)]
print(tupledata)

输出:

^{pr2}$

写入格式:

with open("n.txt","w") as w:
    # w.write(f"{len(tupledata)}\n")  # uncomment for line number on top
    for t in tupledata:                 
        w.write("{:.3f},{:.3f}\n".format(*t)) 

        # for python 3.6 up you can alternatively use string literal interpolation:
        # see    https://www.python.org/dev/peps/pep-0498/

        # w.write(f"{t[0]:.3f},{t[1]:.3f}\n")

with open("n.txt","r") as r:
    print(r.read())

文件中的输出:

1.425,1.917
0.795,0.683
-0.751,3.579
-1.018,2.261
-2.952,4.018
1.820,-2.049
-2.273,1.370
1.343,-1.762
0.502,4.887
2.345,-2.285

请参见proper name for python * operator?了解*t的功能。提示:print(*[1,2,3])==print(1,2,3)


相关问题 更多 >

    热门问题