【发布时间】:2019-07-10 08:48:40
【问题描述】:
我刚刚开始使用 Python 编程。我在检查给定列表是否包含交替的素数和完美正方形序列时遇到问题。该列表可以以素数或完美正方形开头。我想出了一个解决方案,但它效率不高,因为它会生成不需要的列表。这是否可以通过更高效的 Python 代码实现?
首先,我正在创建函数来生成素数列表以及完美平方,直到测试列表的最大值。函数squaretest() 和primecheck():
def squaretest(num):
sqlist=[]
i=1
while i**2 <= num:
sqlist.append(i**2)
i+=1
return sqlist
def primecheck(num):
primelist=[]
for i in range(2,num + 1):
for p in range(2,i):
if (i % p) == 0:
break
else:
primelist.append(i)
return primelist
然后我将给定列表划分为偶数索引和奇数索引元素的列表,并根据primelist 和squarelist 检查它们的所有元素:
def primesquare(l):
if len(l)==1:
primelist = primecheck(l[0])
sqlist = squaretest(l[0])
return (l[0] in primelist) or (l[0] in sqlist)
else:
ol=[]
el=[]
for i in range(0,len(l),2):
ol.append(l[i])
for p in range (1, len(l),2):
el.append(l[p])
primelist = primecheck(max(l))
sqlist = squaretest (max(l))
return((all(x in primelist for x in el)) == True and (all(y in sqlist for y in ol)) == True) or ((all(x in primelist for x in ol)) == True and (all(y in sqlist for y in el)) == True)
它有效。 任何建议都会很有帮助。
【问题讨论】:
标签: python list python-3.6 primes