【问题标题】:Count the unique elements in a list without set计算没有集合的列表中的唯一元素
【发布时间】:2020-02-22 03:23:38
【问题描述】:

我目前正在尝试制作一个程序来计算和打印列表中唯一元素的数量。

我的代码:

def solution(N, A):
    yee = 1   

    for i in range(1, len(A)):
        j = 0
        for j in range(i):
            if(A[i] == A[j]):
                yee-=1
        if(i==j+1):
            yee +=1

    print(yee)


N = int(input())
A = []
n = 0
for e in input().split():
    if(n<N):
        A.append(int(e))
        n+=1

solution(N, A)

使用包含 (1 2 3 1 4 2 5 6 7 8) 的列表,输出应该是 6。但是,我的程序返回 8。我相信这是由于程序计算了 1 和 2,即使尽管它们在技术上并不是唯一的问题。我确定它很容易修复,但我似乎无法弄清楚。任何帮助将不胜感激!

【问题讨论】:

标签: python arrays


【解决方案1】:

对于(1, 2, 3, 1, 4, 2, 5, 6, 7, 8),您获得 6 的输出的唯一方法是,如果您想计算出现恰好一次的元素的数量,而不是唯一元素的数量(那里是 8 个元素,其中两个重复多次)。

您可以在单行中做到这一点:

def num_single_elements(A):
    return len(list(e for e in A if A.count(e) == 1))

【讨论】:

  • 顺便说一下,list(generator expr) 可以是[a list comprehension]
  • 我认为我让代码太复杂了,现在发现我检查错误的东西太大声了。非常感谢!!
  • 类似:sum(1 for x in A if A.count(x) == 1)
【解决方案2】:

同样,如果您需要继续检查代码中的元素数量,我喜欢对此类问题进行字典理解:

dict_A = {x:A.count(x) for x in A}
print(len([x for x in dict_A if dict_A[x] == 1]))

【讨论】:

    【解决方案3】:

    正如 Green Cloak Guy 所说,您似乎正在寻找恰好出现一次的元素的数量,而他的答案包含一个解决方案。这是查找唯一元素数量的简单解决方案:

    def unique_elements(A):
        return len([ 1 for (index, a) in enumerate(A) if A.index(a) == index ])
    

    这里的想法是计算每个唯一值的第一次出现次数。

    • enumerate 允许我们在迭代时获取项目的索引以及项目本身;
    • A.index(a) 给出了a 的值第一次出现在A 中的索引。

    因此,如果我们一直数 index 等于 A.index(a) 的次数,我们将计算一个从未出现过的项目第一次出现的时间,它等于唯一元素的数量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多