【问题标题】:I need the element that appears only occur once我需要只出现一次的元素
【发布时间】:2019-09-09 02:34:26
【问题描述】:

我需要只出现一次的元素。 (蟒蛇)

例如结果

mylist = ['a', 'a', 'a', 'a', 'b', 'c']

2

【问题讨论】:

  • 我认为该示例的结果应该是 3?
  • 为什么是 2?不是应该到 3 点吗?
  • @brunns - 问题不是很清楚。他们想知道只出现一次的元素的数量 -> bc
  • 是的 - 我认为@blhsing 的回答给了他们想要的东西。

标签: python list


【解决方案1】:

您可以使用collections.Counter 计算每个不同项目的出现次数,并使用生成器表达式仅保留计数为 1 的项目:

from collections import Counter
sum(1 for c in Counter(mylist).values() if c == 1)

这会返回:2

【讨论】:

  • 高尔夫sum(c==1 for k, c in Counter(mylist).items())
  • 我知道这种方法,但它的效率较低,因为 sum 将不得不遍历更多数字。首先过滤使sum 更快。查看演示:jdoodle.com/embed/v0/19uT
  • 打高尔夫球更快...打字。您可以将密钥匿名化:sum(1 for c in Counter(mylist).values() if c == 1)
  • 啊,我确实忘记了这里不需要密钥。按建议更新。谢谢。
【解决方案2】:

您基本上想要遍历列表并检查每个元素在列表中出现的次数。如果它出现不止一次,你不想要它,但如果它只出现一次,你将计数器增加 1。

count = 0

for letter in mylist:
  if mylist.count(letter) == 1:
    count += 1

print (count)

【讨论】:

  • 您将数“a”四次,但它会起作用。不过,我更喜欢 Counter 方法。
  • @EricDarchis 你觉得柜台是怎么做到的?如果我们谈论复杂性,我认为它们是相同的。如果我们谈论简单性和可读性,我更喜欢这个。很简单。
  • 请解释你的答案。不要只给出代码答案。
  • @AdamZahran 不,这是二次时间,而基于 Counter 的方法是线性时间
  • 计数器是一个特殊的字典。因此,您只浏览一次数组并在执行过程中递增 dict 中的计数器。正如@juanpa.arrivillaga 所说,您正在浏览数组 len(mylist)*len(mylist) 次,而不是 len(mylist)+len(unique items)。计数器的缺点是它使用更多的内存。但如果有任何问题,n² 复杂度无论如何都会变得更糟。
【解决方案3】:

这种情况看起来像一个纯 Set 结构。 如果我是你,我会转动数组来设置并检查它的大小。

您可以查看示例如何做到这一点here

【讨论】:

  • 这将为['a', 'a', 'a', 'a', 'b', 'c'] 输出 3。 OP 想计算只出现一次的元素的数量,所以 bc
【解决方案4】:

这应该适合你:

len(set(mylist))

它确实要求您的值是可散列的。

【讨论】:

  • 这将为['a', 'a', 'a', 'a', 'b', 'c'] 输出 3。 OP 想计算只出现一次的元素的数量,所以 bc
  • 啊,我明白了。我不会将其描述为独特的元素,但我知道它们在做什么。
  • 你的意思是set()
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多