1

リストが与えられた場合、そのリスト内のすべての要素が特定の整数で割り切れるかどうかを確認したいと思いました。これに基づいて、ブール値を返す必要があります。

l=[10,30,40,20]

たとえば、このリストのすべての要素は5で割り切れます。次に、を返しTrueます。6の場合、私は戻ったでしょうFalse

私が考えることができる1つのアプローチは、ブール値とANDそれらからなる配列を生成することです。

blist=[x%5==0 for x in l]
# [False, False, False, False]
# AND THE ELEMENTS

しかし、このアプローチはちょっと気分が悪いです。誰かがこれからもっと簡単なpythonic方法を提案できますか?

4

2 に答える 2

7

まず、モジュロ除算(%)が必要です。これは、で均等に除算されるかどうか5を確認するためです。したがって、除算の結果ではなく、余りをチェックします。

ビルトイン(缶に書かれていることを実行します)を使用できますがall()リストを生成する必要はありません。代わりに、ジェネレーター式を使用してください。

all(x%5 == 0 for x in l)

これには怠惰であるという利点があるため、値が割り切れないとすぐに戻り、計算を節約します

于 2012-12-07T15:32:03.493 に答える
4

リスト内包表記の使用はPythonicです。そして、divではなくmodを使用する必要があります。

allビルトインを使用

res = all([x%5==0 for x in l])

これをより効率的に行うことができます

res = all(x%5 == 0 for x in l)

ジェネレータ式を使用します。前者の場合、Pythonはすべてのmod値のリストを生成し、後者の場合、値は必要に応じてall生成されるため、最初の分割不可能な値までしか生成されません。

于 2012-12-07T15:30:33.003 に答える