计算列表中的唯一元素而无需设置

时间:2019-10-25 18:52:52

标签: python arrays

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

我的代码:

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,甚至尽管它们在技术上不是唯一的问题。我敢肯定它是容易修复的,但是我似乎无法弄清楚。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:3)

获得(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))

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

正如Green Cloak Guy所说的那样,您似乎正在寻找仅出现一次的元素数量,而他的回答包含了解决方案。这是找到唯一元素数量的简单解决方案:

_hostinfo

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

  • 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的所有次数累加,则我们是在计算第一次出现从未出现过的项目,这等于唯一元素的数量。