列表推导基于条件向元素添加值

时间:2016-09-03 12:35:42

标签: python

我编写的代码返回给定数字的唯一素数因子。这就是代码。此代码不认为1是唯一的素数。 factorial3是返回任何给定数字的阶乘列表的函数。

 def factorials(n):
     x=[j for j in range(1, ((n/2)+1)) if n%j==0]
     x.append(n)
     return x

 n=input()
 numbers=[]
 for i in range(n):
    numbers.append(input())

 count=[0 for j in numbers]
 for i,k in enumerate(numbers):
    for j in factorial3(k):
            if factorial3(j)==[1,j]:
                    count[i]+=1

列表count为我提供了输入的唯一素数。

例如,对于2个数字10,20,因子是[2,5,10]和[2,5,10,20]。然而,独特的素因子分别为[2,5]和[2,5]。因此,计数是[2,2]

我正在努力实现与列表推导相同但迄今为止失败。这是我迄今为止尝试过的事情。

c=[0 for i in numbers]

new=[i+1 for i,k in enumerate(numbers) for j in factorial3(k) if factorial3(j)==[1,j]]
print new
new1=[c[i]+1 for i,k in enumerate(numbers) for j in factorial3(k) if factorial3(j)==[1,j]]
print new1

我几乎就在那里,只是错过了一次只减少一次迭代的事情。

2 个答案:

答案 0 :(得分:0)

如果你想要素数因子,那么只需要达到平方根,而不是整个范围。

替换你的第一行:

c=[0 for i in numbers]

使用:

c=[0 for i in numbers**0.5]

答案 1 :(得分:0)

我能够通过以下代码实现我想要的目标。

new1=[i+1 for i,k in enumerate(numbers) for j in factorial3(k) if factorial3(j)==[1,j]]

c1={}
for i in new1:
    if i not in c1:
            c1[i]=1
    else:
            c1[i]+=1

sortedc=[v for k,v in sorted(c1.items(), key=lambda x:x[0])]
x=zip(numbers, sortedc)

此代码不会返回1的正确值,并且与所有其他正整数完美匹配。我在代码结束时手动添加了1的阶乘。