现在我有了这样的代码:
for s,h,v,r in zip(lopullinen, yksilo, osallistumiset, pistemaarat):
tulostuksia.write(str(s) + ";".join(h) + ";" + str(r) + ";" + ";".join(str(v)) + "/7" + "\n")
并且它提供了这种输出:
tunnus;nimi;sarja;juoksu-60m;pituushyppy;kuulantyonto;korkeushyppy;aitajuoksu-60m;seivashyppy;juoksu-1000m;kokonaispisteet;lajeja
101;Vertti Veteraaniurheilija;M70;709;651;750;806;850;759;801;5326;7/7
41;Severi Seitsenottelija;M;603;551;600;555;559;655;700;4223;7/7
42;Seppo Seitsenottelija;M;661;750;700;610;505;502;700;4428;7/7
43;Ylermi Yleisurheilija;M;603;601;700;655;661;555;500;4275;7/7
60;K. Keskeyttäjä;M40;603;601;-;-;-;-;-;1204;2/7
61;Yrjänä Yleisurheilija;M40;559;500;650;701;603;655;650;4318;7/7
但我希望这些数字是浮点型。像这样:
101;Vertti Veteraaniurheilija;M70;709.0;651.0;750.0;806.0;850.0;759.0;801.0;5326;7/7
Thouse号码来自列表yksilo,其中包含来自班级的数字。如果我改变它是浮动(当添加到列表时),并从上面的循环&#34 ;;" .join(str(h))。它给了我输出的地方&#34 ;;"在每个数字之间(7; 0; 9;。; 0;等等...)如果我不将str(h)放在那里,它会给出" TypeError:序列项0:expect str instance,float found"。
是否有一种简单的方法可以将这些数字形成709.0而不是709。
答案 0 :(得分:0)
使用
'%f' % value
而不是简单的
str(value)
但str(value)
如果'4.0'
在开头是浮动的,那么value
应该已经给了你str(float(value))
。所以,您可能需要先将该值转换为浮点数:
-
此外,如果您需要保留tulostuksia.write(
'%s%s;%s;%s%s' % (
s,
";".join(h),
r,
";".join('-' if vi == 'i' else str(float(vi)) for vi in v),
"/7\n")
值,则还必须检查这些值。所以在你的例子中,使用
{{1}}
答案 1 :(得分:0)
如果h
是一个列表[709.0, 651.0]
,则str(h)
会为您提供"[709.0, 651.0]"
和';'.join(str(h))
,正如您所见,将遍历该列表中的字符字符串,而不是列表中的值。
相反,请尝试';'.join(map(str, h))
。这会将列表中的每个项目单独转换为字符串(无论是'-'
还是float
),然后join
生成的可迭代/列表(取决于在Python版本上的字符串。
示例:
>>> print(";".join(map(str, ["-", 123.4, 567.8, "-", "-", 9.0])))
-;123.4;567.8;-;-;9.0