2017-12-28 7 views
3

私はこの問題に関して長らく頭を打っていましたが、解決策が見つからないようですので、私は援助を求めます。 PS:私は、リスト内のリストを持っているプログラミング入力値が与えられたときにリストのリストを返す

にまだ少し新しい:入力中に「月曜日」を与えたときに私が欲しいもの

[(2012, 'january', 'monday'), (2012, 'february', 'monday'), (2012, 'january', 'tuesday')] 

は、リストで新しいリストである:

[(2012, 'january', 'monday'), (2012, 'february', 'monday')] 

これまでのところ私のコード:

lists = [(2012, 'january', 'monday'), (2012, 'february', 'monday'), (2012, 'january', 'tuesday')] 

day = input("Give day: ") #monday 

def select_monday(lists, day): 
    list2 = [] 
    for list in lists: 
     if list[2] == day: #from here I'm stuck and do not know how to continue 
      list2.append(list[2]) 
     else: 
      return None 
    return list2 

結果:None

特定の値ですべてのリストを取得する方法がわかりません

+0

明確にするために、あなたはタプルのリストを持っている、そしてあなたが「月曜日」と辞書をしたいことが表示されますと '火曜日'を(ユニークな)キーとして使用しますか?そして辞書の値としてのタプルのリスト? –

+0

'defaultdict'を使ってみましたか? –

答えて

4

あなたのコードは、大丈夫でした。また、あなたが実際にあなたの関数を呼び出す必要があります。

lists = [(2012, 'january', 'monday'), (2012, 'february', 'monday'), (2012, 'january', 'tuesday')] 

day = input("Give day: ") #monday 

def select_monday(lists, day): 
    list2 = [] 
    for list in lists: 
     if list[2] == day: #from here I'm stuck and do not know how to continue 
      list2.append(list) 
    return list2 

print(select_monday(lists, day)) 

そして、ここでは、よりコンパクトな機能です:

def select_monday_2(lists, day): 
    return list(filter(lambda x: x[2] == day, lists)) 

print(select_monday_2(lists, day)) 
+0

ありがとうございます。それは確かに私をねじ込んだelse文でした –

0

月曜日でない場合はNoneを返します。 は、これがうまく機能:

def select_monday(lists, day): 
    list2 = [] 
    for lst in lists: 
     if lst[2] == day: 
      list2.append(lst) 
    return list2 

はさらに、リスト全体だけでなく、平日を追加します。 最後に、組み込みであるため、 listを変数名として使用しない方が良いでしょう。

今:

>>> select_monday(lists, day) 
[(2012, 'january', 'monday'), (2012, 'february', 'monday')] 

短い代わり、リストの内包表記を使用して:

>>> [x for x in lists if x[2] == day] 
[(2012, 'january', 'monday'), (2012, 'february', 'monday')] 
0

これに伴う問題は、elseステートメントです。小切手のいずれかが偽であれば、それはreturn Noneになります。 else文を削除して、文のリストにある[2]を削除します。ただし、その日だけ追加したい場合は別です。それ以外の場合は次の反復中に前の手順からの結果を失うことになるので、あなたは、else文を必要としない、以外

lists = [(2012, 'january', 'monday'), (2012, 'february', 'monday'), (2012, 'january', 'tuesday')] 

day = input("Give day: ") #monday 

def select_monday(lists, day): 
    list2 = [] 
    for list in lists: 
     if list[2] == day: #from here I'm stuck and do not know how to continue 
      list2.append(list) 
    return list2 
関連する問題