2017-01-26 12 views
0
i = takewhile(lambda d: len(n) % d == 0 for d in range(3, 6), n) 

私がしたいことは、len(n)が9の場合、私は3をiに格納したいと思っています。 len(n)が25の場合の別の例iを5に格納したいとします。pythonでtakewhileを使って1つの要素をフィルタリングする

はとにかく私は

だから代わりに私が0xa7075c8で i = takewhile((lambda d: len(n) % d == 0 for d in range(3, 6)), n)

itertools.takewhileに変更されていない唯一の引数場合

ジェネレータ式は括弧しなければならない構文エラーを取得しています>

どこが間違っていますか?

+0

保留、あなたはD 'ダブル '定義:発電機にしてラムダに。これはあまり意味がありません... –

答えて

0

<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 
+0

私はちょうどpythonで始まった、ええ、私は完全に間違っていました。簡単な説明をありがとう。 :) –

関連する問題