2016-06-12 4 views
0

2つのリストの各値を繰り返し処理する方法と、使用するループとその方法を混乱させます。助けてください!!Python:2つのリストの各値を繰り返し処理するには、値が<22の場合は1番目のリスト、<2番目のリストの場合は<27です。

私は2つのリスト(datalist_countrydatalist_urban)を持っています。私の主な機能では、各リストをテキストファイルに割り当てました。各リスト上の同じ指標(例えば23)を有する値は、国の同じ車の都市道路に対する走行距離を指す。

私は何らかのループを使用しようとしています(おそらくwhileが最適でしょうか?)。私の最終的な目標は、車の数を返すことです国道で22 mpg未満または都市道路で27 mpg未満です。

def mydatacount(datalist_country, datalist_urban): 
    count = [] 
    for value in datalist_country: 
     num = float(value) 
     if num > 22: 
      count.append(value) 
    for value in datalist_urban: 
     num = float(value) 
     if num > 27: 
      count.append(value) 
    print(len(count)) 
+0

は、これらのリストは、リストのリストはありますか?あなたは言う*各リストの同じインデックス(すなわち、[23])はマイレージ*を参照していますが、文字列の単なるリストのように繰り返しています。データの例を投稿してください。 – dawg

答えて

0

zip関数はそのお手伝いをすることができます。あなたが望むように多くのiterables(リストなど)を取り、タプルを与えるイテレータを作成します。ここで、n番目のタプルは各リストのn番目の要素を含み、タプルの順序はタプルの順序と同じです。イテレータは関数に渡されます。この方法で、複数のリストを一度に繰り返し処理できます。 zip-iteratorは、渡されたイテレータの1つが使い果たされたときに終了することに注意してください。

また、あなたは22または27 mpg未満の車を探すと述べています。したがって、numがそれよりも小さくないかどうかを確認する必要があります。このようになりますことができます:

def mydatacount(datalist_country, datalist_urban): 
    count = 0 
    for value_c, value_u in zip(datalist_country, datalist_urban): 
     num_c = float(value_c) 
     num_u = float(value_u) 
     if num_c < 22 or num_u < 27: 
      count += 1 
    print(count) 
-1

あなたがzipsumでこれを行うことができます。

count = sum(1 for x, y in zip(datalist_country, datalist_urban) if float(x) < 22 or float(y) < 27) 
0

そのフィルタ(if式)で、あなたの走行距離の連続したペアを作成するためにzip関数を使用します条件が合格すると1を返します。 sumgenerator expressionから値を取得し、生成されたすべての1の追加:

def mydatacount(datalist_country, datalist_urban): 
    count = sum(1 for i in zip(datalist_country, datalist_urban) if float(i[0])<22 or float(i[1])<27) 
    print(count) 
関連する問題