我有这个嵌套列表:
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 .
任何解决方案,将非常感谢解释 . 谢谢!
12 回答
这可以使用列表理解来实现:
以下是使用嵌套列表理解的方法:
这将为您提供一个列表列表,类似于您开始使用的列表,除了浮点数而不是字符串 . 如果你想要一个平面列表,那么你将使用
[float(y) for x in l for y in x]
.以下是如何将嵌套for循环转换为嵌套列表理解:
以下是嵌套列表理解的工作原理:
不确定你想要的输出是什么,但是如果你正在使用列表理解,那么顺序遵循嵌套循环的顺序,你已经倒退了 . 所以我得到了我认为你想要的东西:
原则是:使用您在编写嵌套for循环时使用的相同顺序 .
由于我在这里很晚,但我想分享实际列表理解是如何工作的,尤其是嵌套列表理解:
实际上是这样的:
现在嵌套列表理解:
和...一样
输出:
我有一个类似的问题需要解决,所以我遇到了这个问题 . 我对安德鲁·克拉克和纳拉扬的答案进行了性能比较,我想分享一下 .
两个答案之间的主要区别在于它们如何迭代内部列表 . 其中一个使用内置map,而另一个使用列表理解 . Map function has slight performance advantage to its equivalent list comprehension if it doesn't require the use lambdas . 因此,在这个问题的上下文中,
map
应该比列表理解稍微好一些 .让我们做一个性能基准测试,看看它是否真的如此 . 我使用python版本3.5.0来执行所有这些测试 . 在第一组测试中,我希望每个列表中的元素保持为10,并且列表的数量从10-100,000不等
在下一组测试中,我想将每个列表的元素数量增加到100 .
让我们采取勇敢的步骤,并将列表中的元素数量修改为1000
从这些测试中我们可以得出结论,在这种情况下,
map
具有优于列表理解的性能优势 . 如果您尝试强制转换为int
或str
,这也适用 . 对于每个列表中元素较少的少量列表,差异可以忽略不计 . 对于每个列表包含更多元素的较大列表,可能希望使用map
而不是列表推导,但这完全取决于应用程序需求 .但是我个人觉得列表理解比
map
更具可读性和惯用性 . 它是python中事实上的标准 . 通常人们使用列表理解比map
更熟练和舒适(特别是初学者) .如果你不喜欢嵌套列表推导,你也可以使用map函数,
是的,您可以使用以下代码执行此操作:
这个问题可以在不使用for循环的情况下解决 . 单行代码就足够了 . 使用带有lambda函数的嵌套映射也适用于此处 .
输出清单如下:
在我看来,最好的方法是使用python的
itertools
包 .是的,您可以执行以下操作 .