【问题标题】:Python 3: How to check lists within lists with .count()Python 3:如何使用 .count() 检查列表中的列表
【发布时间】:2014-04-25 17:56:30
【问题描述】:

.count() 不会检查其他列表中的列表。我该怎么办?

FirstList = [ ['1', '2', '3'],
              ['4', '5', '6'],
              ['7', '8', '9'] ]

虽然

FirstList[0].count('1')

返回 1。 我想检查所有 FirstList。我该怎么做???

【问题讨论】:

  • 我的回答解决了你的问题吗?
  • 我的回答对你有用吗,@user3573985?如果是,请采纳。
  • 是的,你的回答解决了我的问题。我是新来的,“接受”是什么意思?
  • 点击复选框形状的按钮。

标签: list python-3.x count nested


【解决方案1】:

这里有 3 种可能的解决方案:

给定:

xs = [['1', '2', '3'],
      ['4', '1', '1'],
      ['7', '8', '1']]

[x.count('1') for x in xs]

会回来

[1, 2, 1]

如果您想将其减少为单个值,请依次使用sum

sum(x.count('1') for x in xs)

这将再次给你:

4

或者,您也可以展平嵌套列表,然后在上面运行一次count('1')

reduce(lambda a, b: a + b, xs).count('1')

这将产生

4

但正如 J.F.Sebastian 指出的那样,这比简单的 sum 解决方案效率低/慢。

或者代替reduce,您可以使用itertools.chain 获得相同的效果(不增加计算复杂度):

list(chain(*xs)).count('1')

【讨论】:

  • -1 表示reduce,+1 表示x.count('1') for x in xs。如果你有sum(x.count('1') for x in xs),你为什么要使用O(n**2) reduce 顺便说一句只能从Python 3 中的functools 获得?
  • 是的,实际上sum() 排在首位,但出于某种原因,我觉得扁平化更简单;我会改回来的。
  • chain(*xs) 仍应为 O(n)。
  • chain(*xs) 没问题。它可以写成chain.from_iterable(xs)(不是必需的)。关键是reduce 可读性较差且效率较低。我不在乎 可读 解决方案是否不是最快的解决方案,除非分析器说它是我的应用程序的瓶颈。
  • 你是对的;我开始认为flatten 很容易理解,但当它通过reduce 完成时当然不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多