我有这样一个嵌套列表:

l = [['40', '20', '10', '30'], ['20', '20', '20', '20', '20', '30', '20'], ['30', '20', '30', '50', '10', '30', '20', '20', '20'], ['100', '100'], ['100', '100', '100', '100', '100'], ['100', '100', '100', '100']]

我想把l中的每个元素都转换为float。我有这样的代码:

newList = []
for x in l:
    for y in x:
        newList.append(float(y))

如何用嵌套的列表理解来解决这个问题?


另请参阅:如何从列表理解而不是嵌套列表中获得平坦的结果?


当前回答

下面是如何使用嵌套的列表理解来做到这一点:

[[float(y) for y in x] for x in l]

这将给你一个列表的列表,类似于你开始的,只是用浮点数而不是字符串。

如果你想要一个平面列表,那么你可以使用

[float(y) for x in l for y in x]

注意这个循环顺序,l中的x在这个循环中排在前面。

其他回答

>>> l = [['40', '20', '10', '30'], ['20', '20', '20', '20', '20', '30', '20'], ['30', '20', '30', '50', '10', '30', '20', '20', '20'], ['100', '100'], ['100', '100', '100', '100', '100'], ['100', '100', '100', '100']]
>>> new_list = [float(x) for xs in l for x in xs]
>>> new_list
[40.0, 20.0, 10.0, 30.0, 20.0, 20.0, 20.0, 20.0, 20.0, 30.0, 20.0, 30.0, 20.0, 30.0, 50.0, 10.0, 30.0, 20.0, 20.0, 20.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0]

是的,你可以这样做。

[[float(y) for y in x] for x in l]

下面是如何使用嵌套的列表理解来做到这一点:

[[float(y) for y in x] for x in l]

这将给你一个列表的列表,类似于你开始的,只是用浮点数而不是字符串。

如果你想要一个平面列表,那么你可以使用

[float(y) for x in l for y in x]

注意这个循环顺序,l中的x在这个循环中排在前面。

是的,你可以用这样的代码:

l = [[float(y) for y in x] for x in l]

如果需要一个扁平的列表:

[y for x in l for y in x]

如果需要一个嵌套列表(list In list):

[[float(y) for y in x] for x in l]