したがって、かなり大きなデータセットが次のようになります。
data=[['O', '3C-1', '100', '100', '67.848600000000005', '0.00021722920782039196', '3.4565635', '1.3', '0.7', '0.38673693', '0.618034', '30.0', '-2.0097724299999977'],
['I', '1C-2', '150', '150', '101.77200000000001', '9.6548022169817182e-05', '3.46454077', '1.3', '0.7', '-1.77373911', '-1.70838786', '30.0', '-1.8860072499999994'],
['O', '3C-2', '250', '250', '169.62', '3.4757287981134192e-05', '3.48710222', '1.3', '0.7', '-6.81997504', '-3.94866255', '30.0', '-1.5686071800000005'],
['O', '3C-2', '500', '500', '339.23899999999998', '8.6893732236788835e-06', '3.23954068', '1.3', '0.7', '19.05924395', '2.15260466', '30.0', '-1.0255009299999993']]
次に、次のような定義があります。
def mdata(a=None,b=None,c=None,d=None):
filt=[]
for num,a in enumerate([a,b,c,d]):
if a==None: continue
filt.append([a,num])
data=creader(open(stuff.csv'))
for a,num in filt:
data=[x for x in data if a in x[num]]
for a in data: print a
a、b、c、dは、データセットの最初の4列を処理します。したがって、mdata()を呼び出すと、データセット全体が返されますが、がdata(a ='O')を指定すると、最初の列にOが含まれるデータのみが返されます。
これは、列cとdを除いて正常に機能します。これらはintである必要があるためです。たとえば、mdata(c = '10')を指定すると、3番目の列に10が含まれるすべてのデータセット(100、5103など)が取得されます。ここで条件を設定して、文字列を条件付きで検索したり、問題のデータをintに変換したりできますが、条件を正しく取得できず、これを行うには非常に貧弱な方法のようです。これをどのように改善できますか?