不能在列表中执行元组解包



基本上问题是看看一个数字是否是t素数(t素数有3个不同的正数),我已经编写了代码,它给了我如下所示的列表:

[(4, 1), (4, 2), (4, 4), (5, 1), (5, 5), (6, 1), (6, 2), (6, 3), (6, 6)]

我需要一个函数来返回上面列表中每个I值(I,j)中j的个数,比如4有三个除数,5有两个除数等等。

https://codeforces.com/problemset/problem/230/B

"代码"
# 230B
n = int(input())
a = list(map(int, input().split()))
lst = []
for j in range(len(a)):
i = 1 
while i <= a[j]:
if a[j]%i == 0:
lst.append((a[j],i))
i += 1
print(lst)

请参阅上一页

看起来您的目标是计算具有给定第一个元素的元组的个数。试试这个:

counter = {}
values = [(4, 1), (4, 2), (4, 4), (5, 1), (5, 5), (6, 1), (6, 2), (6, 3), (6, 6)]
for value, divisor in values:
current = counter.get(value, 0) + 1
counter[value] = current

然后,使用counter[n]获取给定值的计数。例如,counter[4]就是3

如果除数不能保证唯一,则使用集合作为字典值:

counter = {}
values = [(4, 1), (4, 2), (4, 4), (5, 1), (5, 5), (6, 1), (6, 2), (6, 3), (6, 6)]
for value, divisor in values:
if value not in counter:
counter[value] = set()
counter[value].add(divisor)

则可以得到len(counter[n])的因数个数。所以,len(counter[4])就是3

最新更新