我想使用列表推导将嵌套列表中的元素更改为浮动。
lines = [[1, '74.37000326528938', 'Psychologist'], [2, '67.49686206937491', 'Psychologist'], [3, '74.92356434760966', 'Psychologist']]
>>> lines = [[line[0]] + [float(x) for x in line[1]] + [line[2]] for line in lines]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: .
我也不明白为什么这对另一个例子也有用:
mylist = [['1','2','3'],['5','6','7']]
datl3 = [[int(x) for x in line[0]] + line[1:] for line in mylist]
datl4 = [[line[0]] + [float(x) for x in line[1]] + [line[2]] for line in datl3]
>>> datl4
[[1, 2.0, '3'], [5, 6.0, '7']]
我认为这与小数点有关,因为该代码不适用于本示例:
mylist = [['1','2.555','3'],['5','6.777','7']]
datl3 = [[int(x) for x in line[0]] + line[1:] for line in mylist]
datl4 = [[line[0]] + [float(x) for x in line[1]] + [line[2]] for line in datl3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: .
答案 0 :(得分:1)
您很亲密,但是问题是您在for
上使用了line[1]
循环,它是一个字符串。因此,您正在遍历浮点数的每个元素/字符。当您达到小数点.
时,您会得到ValueError: could not convert string to float: .
。第二个示例之所以有用,是因为那里只有一个数字字符串2
和6
,没有任何小数点。
如果您坚持执行自己的代码,只需在切片位置按如下所示用line[1]
替换索引line[1:2]
lines = [[line[0]] + [float(x) for x in line[1:2]] + [line[2]] for line in lines]
但是,一种更简洁的方法是遵循以下步骤,通过直接访问子列表的第二个元素来避免不必要的中介for循环。您无需创建三个子列表,然后使用+
lines = [[line[0], float(line[1]), line[2]] for line in lines]
输出
[[1, 74.37000326528938, 'Psychologist'],
[2, 67.49686206937491, 'Psychologist'],
[3, 74.92356434760966, 'Psychologist']]
答案 1 :(得分:1)
问题在于此行尝试一次执行太多操作:
datl4 = [[line[0]] + [float(x) for x in line[1]] + [line[2]] for line in datl3]
问题出现在内部列表理解中:
[float(x) for x in line[1]]
但是line[1]
是什么?它来自迭代for line in datl3
。因此,让我们看看它具有什么值:
>>> [line[1] for line in datl3]
['2.555', '6.777']
因此,当您执行[float(x) for x in line[1]]
时,您要遍历每个数字字符串的字符... "2"
然后是"."
然后是"5"
然后是"5"
然后是{ {1}}。但是"5"
不是有效的浮点数。
我认为您要做的只是将"."
转换为line[1]
:
float
答案 2 :(得分:0)
可以通过 list comprehension 完成,只需设置正确,检查str
是否为小数,如果是,则将该项目设置为int
l = [[float(j) if '.' in str(j) else j for j in i] for i in l]
[[1, 74.37000326528938, 'Psychologist'], [2, 67.49686206937491, 'Psychologist'], [3, 74.92356434760966, 'Psychologist']]