Python3:在列表中存储要在函数中使用的范围?
我需要创建一个每个数字的列表,直到一个非常大的特定数字。然后,这个数字列表需要经过我创建的一个函数,该函数将吐出返回True的每个数字。从所有这些真实的数字中,我需要找到第300个并打印出来Python3:在列表中存储要在函数中使用的范围?,python,list,function,python-3.x,range,Python,List,Function,Python 3.x,Range,我需要创建一个每个数字的列表,直到一个非常大的特定数字。然后,这个数字列表需要经过我创建的一个函数,该函数将吐出返回True的每个数字。从所有这些真实的数字中,我需要找到第300个并打印出来 def p(n): return n==n[::-1] def s(n): return list(filter(p ,n)) 这是列表将要执行的函数。小费 >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 请注意,这一切听起
def p(n):
return n==n[::-1]
def s(n):
return list(filter(p ,n))
这是列表将要执行的函数。小费
>>> 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
如果我理解正确,您可以使用生成器和
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))
措辞含糊不清令人困惑。是否有实际的用例,或者这是一个家庭作业?另外,您是否可以提供示例输入/输出/中间步骤?这里的实际问题是什么?这是一个很棒的解决方案。你能不能用一个生成器而不是
map
,这样它就可以一直运行下去?@Sammusmann OP被标记为Py3,所以map
被认为是一个生成器。否则,你可以用xrange
替换range
,用imap
替换map
(但是,是的,我想人们可以写nums=(str(n)表示范围(300)中的n))
或其他东西)啊——我生活在一个2.x的世界里,不知道这些返回Py3中的iterables。谢谢