嵌套列表上的列表理解?

2024-04-28 04:12:48 发布

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

我有一个嵌套列表:

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']]

现在,我要做的是将列表中的每个元素转换为float。我的解决方案是:

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

但这可以通过嵌套列表理解来实现,对吧?

我所做的是:

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

但结果是一堆100个和2400个。

任何解决办法,一个解释将不胜感激。谢谢!


Tags: in元素列表for解决方案floatappend解决办法
3条回答

下面是如何将嵌套for循环转换为嵌套列表理解:

enter image description here

下面是嵌套列表理解的工作原理:

            l a b c d e f
            ↓ ↓ ↓ ↓ ↓ ↓ ↓
In [1]: l = [ [ [ [ [ [ 1 ] ] ] ] ] ]
In [2]: for a in l:
   ...:     for b in a:
   ...:         for c in b:
   ...:             for d in c:
   ...:                 for e in d:
   ...:                     for f in e:
   ...:                         print(float(f))
   ...:                         
1.0

In [3]: [float(f)
         for a in l
   ...:     for b in a
   ...:         for c in b
   ...:             for d in c
   ...:                 for e in d
   ...:                     for f in e]
Out[3]: [1.0]

#Which can be written in single line as
In [4]: [float(f) for a in l for b in a for c in b for d in c for e in d for f in e]
Out[4]: [1.0]

下面是使用嵌套列表理解的方法:

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

这将为您提供一个列表列表,与您开始使用的列表类似,只是使用浮点数而不是字符串。如果您想要一个平面列表,那么您可以使用[float(y) for x in l for y in 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]

相关问题 更多 >