1. ホーム
  2. python

[解決済み] リスト内のすべての値がある数より大きいかどうかをチェックする

2022-11-03 19:58:59

質問

my_list1 = [30,34,56]
my_list2 = [29,500,43]

リスト内のすべての値が>=30であるかどうかを確認するには? my_list1 は動作するはずで my_list2 は動作しないはずです。

ということしか思いつきませんでした。

boolean = 0
def func(ls):
    for k in ls:
        if k >= 30:
            boolean = boolean + 1
        else:
            boolean = 0
    if boolean > 0:
        print 'Continue'
    elif boolean = 0:
        pass

2016年の更新情報です。

今にして思えば、実際に速度が問題となるような大きなデータセットを扱い、また numpy ...私ならこうします。

>>> my_list1 = [30,34,56]
>>> my_list2 = [29,500,43]

>>> import numpy as np
>>> A_1 = np.array(my_list1)
>>> A_2 = np.array(my_list2)

>>> A_1 >= 30
array([ True,  True,  True], dtype=bool)
>>> A_2 >= 30
array([False,  True,  True], dtype=bool)

>>> ((A_1 >= 30).sum() == A_1.size).astype(np.int)
1
>>> ((A_2 >= 30).sum() == A_2.size).astype(np.int)
0

というようなこともできます。

len([*filter(lambda x: x >= 30, my_list1)]) > 0

どのように解決するのですか?

この場合 all() 機能 をジェネレータ式で指定します。

>>> my_list1 = [30, 34, 56]
>>> my_list2 = [29, 500, 43]
>>> all(i >= 30 for i in my_list1)
True
>>> all(i >= 30 for i in my_list2)
False

よりも大きいかどうかをテストしていることに注意してください。 と同じか 30、それ以外は my_list1 もテストに合格しないでしょう。

もしこれを関数でやりたかったら、使うでしょう。

def all_30_or_up(ls):
    for i in ls:
        if i < 30:
            return False
    return True

例:あることを証明する値を見つけるとすぐに a の値が30以下になったら False を、そして True を返します。

同様に any() 機能 をテストするために が1つ以上あるかどうか の値が条件に一致するかどうかをテストします。