2016-07-08 5 views
0

私はリストの理解を条件として生成しているリストの長さを使用したいと思います。 )関数自体リストの理解のための任意の関数の条件としてのリストの長さ

私は2つのラインでこれを行うことができます -

li = [1,2,3,4] 
lcond = [x for x in li if x > 3] 
any(lcond) and len(lcond) >2 

しかし、私はあなたが本当にここにリストの内包を必要としない1

+2

*「私は1つでやりたい」* - なぜですか?あなたはキャラクターによって請求されますか?読み取り可能なコードを書く! – jonrsharpe

+0

明示的は暗黙的より優れています。 [Python Zen](https://www.python.org/dev/peps/pep-0020/)。 – Hamlett

+0

'any(lcond)'とは何ですか? –

答えて

2

でそれを行うにしたいと思います。 Pythonの3では

if len(filter(lambda x: x > 3, li)) > 2: 

、明示的filterによって返された発電機を消費する必要があります。

if len(list(filter(lambda x: x > 3, li))) > 2: 

実は、なぜ私はここでもfilterを使用していますか?

if len([x for x in li if x > 3]) > 2: 

anyリストの非ゼロの長さはany(...)がtrueを返すということを意味しているため、不要です。

+0

ジェネレータのためにPython3で動作しません。 – Hamlett

0

あなたのリストが非常に大きい場合は、 は条件を満たしている項目が少なくとも2つあるかどうかを知るためにリスト全体を調べないことをお勧めします。

test_list = [1,2,3,4] 
# Returns False 
len(list(itertools.islice(filter(lambda x: x>3, test_list), 2))) == 2 

test_list = [1,2,3,4,5,6,7,8] 
# Returns True 
len(list(itertools.islice(filter(lambda x: x>3, test_list), 2))) == 2 

それは、より複雑であるが、リストが巨大である場合には、リスト全体を通過しない方が良いです:

は、私はそのような発電機の上に適用itertollsからisliceを使用することをお勧めします。