2016-06-12 5 views
1

나는 특정 단어가 포함 된 모든 목록을 반환 전체가 중첩 된 목록을 검색하는 함수를 작성하는 것을 시도하고를 반복하지만,이 경우에만 반환 None목록 이해 - 중첩 된 목록

word = "what song?" 
def searchSong(mp3_list, word): 
    search = input((word)) 
    match = [i for i in mp3_list if search in i[2]] 
for confirmed in match: 
    print(confirmed[0],'\n', confirmed[1],'\n', confirmed[2]) 

print(searchSong(mp3_list, word)) 

내가 비교를 테스트는 match 변수는 여전히 아무 것도 반환하지 :

mp3_list = [["Eric Clapton","Tears in heaven","Rush"],["Neil Young", "Heart of gold", "Harvest"]] 
match = [i for i in mp3_list if 'heaven' in i[2]] 
print(match)  #returns [] 

그러나 이것은 정확히 같은 나타나는 구문에도 불구하고, 작동 :

li = [["0", "20", "ar"], ["20", "40", "asdasd"], ["50", "199", "bar"]] 
match = [i for i in li if 'ar' in i[2]] 
print(match)  #returns [['0', '20', 'ar'], ['50', '199', 'bar']] 

은 어떤 도움이 많이

+1

첫 번째 예에서 "heaven"은'i [2]'에 없으며'i [1]'에 있습니다. – sberry

답변

1

'하늘이'["Eric Clapton","Tears in heaven","Rush"]의 두 번째 요소에 존재 : 평가 될 것입니다,하지만 당신은 세 번째 요소 (i[2])를 확인하고 있습니다. 파이썬 배열은 0에서하지 1. 시작 색인 (그러나 두 번째 예제는 올바른 i[2]에서 "AR"을 찾습니다 당신이 알고 나타납니다.)

또한, searchSong()하지 반환 아무것도하지 따라서 기본적으로 없음을 반환합니다.

1
mp3_list = [["Eric Clapton","Tears in heaven","Rush"],["Neil Young", "Heart of gold", "Harvest"]] 
match = [i for i in mp3_list for j in i if 'heaven' in j] 
match 
Out[7]: [['Eric Clapton', 'Tears in heaven', 'Rush']] 


li = [["0", "20", "ar"], ["20", "40", "asdasd"], ["50", "199", "bar"]] 
match = [i for i in li for j in i if 'ar' in j] 
match 
Out[10]: [['0', '20', 'ar'], ['50', '199', 'bar']] 
+0

나는 목록 이해력 안에서 중첩 된 for 루프를 사용하는 것을 생각하지 않았다. MaThMaX : – AJP

+1

@AJP,이 방법은 내부 목록의 색인에있는 'key'와 상관없이 작동한다. 하지만 John Gordon은 맞습니다. 파이썬 인덱스는 항상 0부터 시작합니다. – MaThMaX