【问题标题】:two for loops in list comprehension python列表理解python中的两个for循环
【发布时间】:2015-02-19 16:45:52
【问题描述】:

我有一个清单:

f_array=['1000,1','100,10','100,-10']

我正在尝试总结上述数组的每个值中的所有第一个元素。我试过类似的东西:

number = sum([ num for num in item.split(",")[1] for item in f_array])

但它不起作用。最好的方法是什么?

【问题讨论】:

标签: python python-2.7 list-comprehension


【解决方案1】:

如果要使用嵌套循环,则需要交换for 循环的顺序:

number = sum([num for item in f_array for num in item.split(",")[1]])

列表理解循环按嵌套顺序列出,从左到右与常规 Python 循环中的嵌套相同:

for item in f_array:
    for num in item.split(",")[1]:

这仍然行不通,因为item.split(',')[1] 是一个字符串;你最终会遍历字符。如果您想每隔一个数字求和,只需选择那个数字:

item.split(",")[1] for item in f_array

选择一个元素时没有顺序,因此无需循环。

您实际上并不想在这里使用列表推导;删除 [...] 方括号,使其成为生成器表达式,从而完全避免创建中间列表对象。

如果您想对字符串求和,还需要将字符串转换为整数:

number = sum(int(item.split(",")[1]) for item in f_array)

演示:

>>> f_array = ['1000,1', '100,10', '100,-10']
>>> sum(int(item.split(",")[1]) for item in f_array)
1

【讨论】:

  • 它做了一些意想不到的事情。结果 ['1', '1', '0', '-', '1', '0']
  • 您可能想查看提供的演示。您发表评论时,Martijn Pieters 正在更新。
猜你喜欢
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 2018-10-28
  • 2019-12-04
相关资源
最近更新 更多