オブジェクトのリストと、関連するパラメータのリスト (param1、param2、param3 など) がある状況に陥ることがよくあります。いくつかの条件を満たすパラメータを持つオブジェクトのサブセットを取得したいと考えています。疑似コードは次のようになります。
subset = object if param1>10 and 5<param2-param3<6 and param4==1
リスト内包表記を使用してそれを行う方法は知っていますが、非常に見苦しく、他の人が読みにくい場合があります。代替手段はありますか?たとえば、リストの要素を 2 つずつ追加するには、次のような手間がかかります。
list1=[1,2,3,4]
list2=[10,10,10,10]
[item[0]+item[1] for item in zip(list1,list2)]
>>> [11, 12, 13, 14]
リスト内包表記の代わりに NumPy 配列を使用すると、すぐに明確に見えます。
import numpy
list1=numpy.array([1,2,3,4])
list2=numpy.array([10,10,10,10])
list1 + list2
>>> array([11, 12, 13, 14])
そして、2 つ以上のリストに対していくつかの重要な操作を開始すると、明確さの向上はさらに大きくなります。
オブジェクトのリストでいくつかの行のみを選択するという最初の問題に戻ります。
subset = [item[0] for item in zip(object,param1,param2,param3,param4) if item[1]>10 and item[2]-item[3]>5 and item[2]-item[3]<6 and item[4]==1]
また:
subset = [obj for obj,p1,p2,p3,p4 in zip(object,param1,param2,param3,param4) if p1>10 and p2-p3>5 and p2-p3<6 and p4==1]
私が望むものを正確に実行しますが、それは非常にエレガントではありません。言うまでもなく、非 Pythoneers はすぐに「SuperMongo の方が簡単です」または「これのために IDL をあきらめてほしい!?」と言い始めます。
この特定のタスクに適した構文を提供する代替ソリューションを知っていますか? NumPy 配列は、構文を単純化するのに役立ちますか?