我需要创建每个数字的列表,直到一个非常大的特定数字。然后,这个数字列表需要通过我创建的一个函数,该函数将吐出每个返回 True 的数字。从所有这些真实数字中,我需要抓住第 300 个并打印出来。
def p(n):
return n==n[::-1]
def s(n):
return list(filter(p ,n))
这是列表将通过的功能。提示?
我需要创建每个数字的列表,直到一个非常大的特定数字。然后,这个数字列表需要通过我创建的一个函数,该函数将吐出每个返回 True 的数字。从所有这些真实数字中,我需要抓住第 300 个并打印出来。
def p(n):
return n==n[::-1]
def s(n):
return list(filter(p ,n))
这是列表将通过的功能。提示?
如果我理解正确,您可以使用生成器和islice
from itertools import islice
nums = map(str, range(11, 300))
palindromes = (num for num in nums if num == num[::-1])
ix = islice(palindromes, 15, None)
print(next(ix))
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
请注意,这听起来很慢,您可能可以优化很多。例如,您的回文检查 ( p(n)
) 可以更改为仅将列表的前半部分与反转的后半部分进行比较。或者实际上从开头和顶部同时遍历元素,并在失败时立即返回 false:
def checkPalindrome (seq):
for i in range(len(seq)):
if seq[i] != seq[-i-1]:
return False
return True