【问题标题】:Return the first occurance of a certain string length using itertools in Python在 Python 中使用 itertools 返回某个字符串长度的第一次出现
【发布时间】:2014-06-22 18:51:47
【问题描述】:

我在 python 中使用生成器生成斐波那契数列(生成器工作正常)

问题是我不知道如何获取第一个 n 位变量并打印它。

print list(itertools.takewhile(lambda x: len(str(x))<=3,fib_function()))

将返回

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
  • 换句话说,它返回所有三位数字项,这是不必要的,因为我只想要最多并包括 144。 将其限制为两个不会生成下一个,我会需要,而且我似乎无法欺骗它再进行一次迭代。

  • 此外,此代码将打印整个序列,而不仅仅是最后一次出现。我浏览了文档,但似乎没有任何建议。我可以忍受它,但如果它这样做会更好。

(注:这是项目欧拉问题25:生成第一个100位斐波那契数)

【问题讨论】:

  • 关于为什么需要使用 itertools 的任何具体原因?一个简单的while循环也应该可以正常工作
  • @vz0 的印象是它更快,不是吗?
  • IHDK,你应该测量它。请记住,欧拉程序大多是您为解决特定练习而编写的一次性代码。程序越简单越好。

标签: python


【解决方案1】:

切换到itertools.dropwhile() 跳过3 位数以下的所有内容,然后使用next()下一个 值:

print next(itertools.dropwhile(lambda x: x < 100, fib_function()))

我将数字测试改为测试 100;这样可以节省 2 次函数调用。

演示:

>>> print next(itertools.dropwhile(lambda x: x < 100, fib_function()))
144

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2019-12-20
    相关资源
    最近更新 更多