【问题标题】:Python 3: Storing a range in a list to be used in a function? [closed]Python 3:将范围存储在要在函数中使用的列表中? [关闭]
【发布时间】:2012-10-12 14:53:57
【问题描述】:

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

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

这是列表将通过的函数。提示?

【问题讨论】:

  • 措辞的模糊性令人困惑。是否有实际用例,或者这是家庭作业?
  • 另外,您能否提供示例输入/输出/中间步骤?
  • 这里的实际问题是什么?

标签: python list function python-3.x range


【解决方案1】:

如果我理解正确,您可以使用生成器和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 以便它一直是可迭代的吗?
  • @SamMussmann OP 被标记为 Py3,因此 map 被假定为生成器。否则,您可以将range 替换为xrange,将map 替换为imap(但是是的,我想可以写成nums = (str(n) for n in range(300)) 之类的)
  • 啊——我生活在一个 2.x 的世界中,不知道这些在 Py3 中返回迭代。谢谢!
【解决方案2】:
>>> 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 2021-12-04
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 2012-10-17
    • 2012-06-08
    相关资源
    最近更新 更多