<itertools.takewhile at 0xa7075c8>
を出力する理由は、itertoolsがリストではなくジェネレータを生成するためです。したがって、結果がで、が実際に必要になるまで(またはlist(..)
を囲むまで)実現されません。
だけでなく、コンパイラは発電はparentesis、全体ではなく、ラムダ式を持つべきである、と言います。だから、:
i = takewhile(lambda d: (len(n) % d == 0 for d in range(3, 6)), n)
しかし、我々はまだありません:あなたは確かに、あなたのラムダの頭の中で、発電機の両方でd
を定義します。
i = takewhile(lambda d: (len(n) % d == 0 for d in range(3, 6)), n)
最後にあなたがtakewhile
私は考える間違った方法を使用します。私の知る限り、あなたが成功した最初の要素は、あなたは、単にあなたの構築発電機に.next()
を呼び出すことができますしたい知っている、ようにあなたはおそらくしたい:
i = (d for d in range(3, 6) if len(n) % d == 0).next()
のPython-2で
、または:
i = next(d for d in range(3, 6) if len(n) % d == 0)
でPython-3。インタプリタでこれを実行する
は
います:
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> n=[1,2,3,4,5,6,7,8,9]
>>> i = next(d for d in range(3, 6) if len(n) % d == 0)
>>> i
3
>>> n=[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5]
>>> i = next(d for d in range(3, 6) if len(n) % d == 0)
>>> i
5
保留、あなたはD 'ダブル '定義:発電機にしてラムダに。これはあまり意味がありません... –