0

我需要创建每个数字的列表,直到一个非常大的特定数字。然后,这个数字列表需要通过我创建的一个函数,该函数将吐出每个返回 True 的数字。从所有这些真实数字中,我需要抓住第 300 个并打印出来。

def p(n):
  return n==n[::-1]
def s(n):
  return list(filter(p ,n))

这是列表将通过的功能。提示?

4

2 回答 2

2

如果我理解正确,您可以使用生成器和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))
于 2012-10-22T18:43:31.210 回答
0
>>> 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
于 2012-10-22T18:32:10.007 回答