[英]Changing all strings except one in a list of lists to a float
我有一个列表列表:
LofL = [["string", "number", "number", "number"], ["string", "number", "number", "number"], ...]
我试图将列表列表中的数字转换为浮点数而不是字符串。 列表的每个列表的长度都不相等。 到目前为止我有:
for sublist in LofL:
sublist[1:] = float(sublist[1:])
但我收到错误float argument must be a string or real number not a list 。 如果我执行sublist[1] = float(sublist[1])
这适用于单个数字,但我不确定如何在没有 [1:] 索引的情况下将所有数字包含在每个列表列表中。
for sublist in LofL:
for i in range(1, len(sublist)):
sublist[i]=float(sublist[i])
说明:您的初始代码sublist[1:]=float(sublist[1:]
将不起作用,因为sublist[1:]
是一个列表,您不能将 list 转换为 float。
因此for i in range(1, len(sublist)
将遍历子列表中的每个元素,然后在每次迭代中我们将sublist
sublist[i]=float(sublist[i]
转换为 float。因为您指定了第一项子列表不需要更改,因此我们从 1 开始循环
这与此处的其他答案非常相似。 我只是包括它,因为它似乎是您在原始代码中想要的,重新分配列表的一部分:
LofL = [["string", '1', '2', '3'], ["string", '4', '5', '6', '7']]
for sublist in LofL:
sublist[1:] = map(float, sublist[1:])
print(LofL)
# [['string', 1.0, 2.0, 3.0], ['string', 4.0, 5.0, 6.0, 7.0]]
@Mark 的出色回答解决了您的特定问题。 但是,有一个隐含的假设,即应忽略每个子列表的第一个元素,并且可以将后续元素转换为浮点数。
这是一个简单的双循环,它将尝试转换所有元素。 这将允许“字符串”组件位于列表中的任何位置。
LofL = [["string", "42", "42", "1"], ["string", "2.5", "100", "20"], [5, 'string']]
for e in LofL:
for i, v in enumerate(e):
try:
e[i] = float(v)
except ValueError:
pass
print(LofL)
Output:
[['string', 42.0, 42.0, 1.0], ['string', 2.5, 100.0, 20.0], [5.0, 'string']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.