2016-05-12 2 views
-1

Поэтому мне нужно выполнить поиск, если элемент находится в первом столбце списка списков, и если это так, напечатайте элемент. Я должен делать это с помощью функций.Поиск в списке списков и функций

CD = input("Enter name of CD database: ")  

def createDatabase(CD):  #opens and creates list 
    aList = [] 
    file = open(CD) 
    for line in file: 
     line = line.rstrip().split(",") #strip \n and split at , 
     aList.append(line)  #add lines into formerly empty aList 
    for i in range(len(aList)): 
     aList[i][3] = float(aList[i][3]) #override line for price to be float 
    return aList 

aList = createDatabase(CD) 

def PrintList(aList): 
    for line in aList: 
     album = str(line[0]) 
     artist = str(line[1]) 
     genre = str(line[2]) 
     price = str(line[3]) 
     print("Album: " + album + " Artist: " + artist + " Genre: " + genre + " Price: $" + price) 
    return 


def FindByTitle(aList): 
    target = input("Enter Title to Search: ") 
    for item in aList: 
     if target in aList: 
      print(target) 
     else: 
      print ("Title not found") 
    return aList 

PrintList(FindByTitle(aList)) 

Выход я получаю от этого

Enter name of CD database: CD.txt 
Enter Title to Search: Sempiternal 
Title not found 
Title not found 
Title not found 
Title not found 
Album: Sempiternal Artist: Bring Me The Horizon Genre: Metalcore Price: $14.5 
Album: Badlands Artist: Halsey Genre: Indie Pop Price: $19.95 
Album: Wildlife Artist: La Dispute Genre: Post Hardcore Price: $9.6 
Album: Move Along Artist: The All American Rejects Genre: Punk Rock Price: $10.2 

, и я не совсем уверен, как это сделать или исправить мою функцию поиска. Любая помощь будет большой благодарностью.

+0

Добавьте некоторые выборочные данные и вход (замените 'input' выражения со строками) на ваш вопрос таким образом, мы можем запустить код. –

+1

'if target in aList:' неверно. 'if target в элементе:' – ssm

ответ

0

Вы можете скорей вернуться в свою функцию FindByTitle, как только найдете совпадение. Если поток управления выходит из цикла, вы можете быть уверены, что критерии не были выполнены и возврат отказа.

def FindByTitle(aList): 
    target = input("Enter Title to Search: ") 
    for item in aList: 
     if target in item: 
      print(target) 
      return aList # return here 
    print("Title not found") 
    return None 

В случае, если вам необходимо вернуть все возможные списки, сохранить счетчик, который может быть использован, чтобы найти, есть ли, по крайней мере один матч

+0

, который работал отлично, однако, есть способ, которым я могу заставить его искать только первый набор элементов, потому что пока он печатает правильный вывод, а затем «заголовок не найден» три раза за каждый из других строк списка – Staylor742

+0

действительно получил, что отсортировано. Один последний вопрос, хотя, есть способ, которым я могу заставить его печатать только цель? Поскольку он по-прежнему печатает как целевой, так и весь список снова после него. – Staylor742

+0

Просто оставьте заявление о печати, которое у вас есть в конце. – bashrc

0

В функции FindByTitle изменения alist к item в строке 4 , потому что вы ищет цель в крене, который вложен список вместо поиска в списках, генерируемого контур

def FindByTitle(aList): 
target = input("Enter Title to Search: ") 
for item in aList: 
    # change here 
    if target in item: 
     print(target) 
    else: 
     print ("Title not found") 
return aList 
Смежные вопросы