2017-12-28 1 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

문제는 다른 문이다. 수표 중 하나라도 거짓이면 return None입니다. else 문을 제거하고 을 제거하십시오. 단, 하루 만 추가하려는 경우가 아니면 append 문에 나열된 목록에서 제거하십시오. 그렇지 않으면 다음 반복시 이전 단계의 결과를 잃어 버리게 때문에, 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 
관련 문제