我目前正在尝试制作一个程序,该程序将计算并打印列表中唯一元素的数量。
我的代码:
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,甚至尽管它们在技术上不是唯一的问题。我敢肯定它是容易修复的,但是我似乎无法弄清楚。任何帮助将不胜感激!
答案 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
的所有次数累加,则我们是在计算第一次出现从未出现过的项目,这等于唯一元素的数量。