【问题标题】:List comprehension using index values使用索引值的列表理解
【发布时间】:2021-05-31 08:54:48
【问题描述】:

如何将下面的 for 循环转换为列表理解?

我有一个列表列表。每个子列表在索引 4 位置都有一个数字,我想找到一种方法将它们相加。 for 循环有效,但我想要一个带有列表理解的单行解决方案。

frequencies = []

for row in table:
    frequencies.append(int(row[4]))
sum(frequencies)

这是我的尝试:

frequencies = [sum(i) for i, x in enumerate(table) if x == 4]

但是,结果是一个空对象。

In[52]: total
Out[52]: []

【问题讨论】:

  • 列表理解与第一个版本完全不同。你不想要[int(row[4]) for row in table]吗?
  • “把它们加起来”?你说的第一个 sn-p 不会“加起来”任何东西,而是收集它们。
  • 抱歉,我错过了添加行(已编辑)。
  • @jonrsharpe:我认为 OP 的意图是 ... if i == 4],即使用枚举索引仅过滤掉第 4 列。但他们也需要for i, x in enumerate(row) for row in table if i == 4]。同意当我们可以简单地切片 row[4] 时它是不必要的冗余

标签: python list list-comprehension


【解决方案1】:

这样做 -

frequencies = sum([int(row[4]) for row in table])

您使用的方法与您想要实现的方法略有不同。

【讨论】:

  • 不错,但需要“单线解决方案”,所以sum([int(row[4]) for row in table])。 /s
  • 编辑了答案
  • sum 接受任何可迭代对象,因此不需要 [....]sum(int(row[4]) for row in table) 更清晰易读,并且可能(有点古怪)性能更高(因为不需要分配列表)。
  • @Amadan 轻微的性能提升将是 0.001 微秒。
  • @ShreyanAvigyan 不仅是 CPU 性能,还有内存。
猜你喜欢
  • 1970-01-01
  • 2013-09-19
  • 2013-12-23
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 2021-12-17
相关资源
最近更新 更多