2016-06-27 5 views
3

У меня есть вложенный список под названием игроков, как показано ниже:Python Поиск Вложенные списки

players = [["PlayerA", "10", "20"], ["PlayerB", "15", "30"], ["PlayerC", "15", "30"] ] 

Я хочу, чтобы иметь возможность осуществлять поиск по имени игрока (PlayerA, PlayerB и т.д.) с использованием входного заявление и, если поиск соответствует элементу, затем распечатывает весь элемент. Как бы я это сделал, я пытаюсь изучить разные методы.

search = input("Please enter the players name") 
for item in players: 
    if item == search: 
    print(item) 
    else: 
    print("item not found") 

Когда я делаю вышеуказанное, он не печатает элемент, который не найден.

Большое спасибо в Advance.

ответ

1

Да просто сделать вы такой код:

players = [["PlayerA", "10", "20"], ["PlayerB", "15", "30"], ["PlayerC", "15", "30"] ] 
search = input("Please enter the players name: ") 

result = [player for player in players if player[0] == search] 

if result == []: 
    print("item not found") 
else: 
    print(result) 
+0

Благодаря Roadrunner, однако при поиске элемента, который существует, например, PlayerC, она печатает элемент и под ней печатает «элемент не найден» например, введите имя игрока, которое вы хотите найтиPlayerC ['PlayerC', '15', '30'] Позиция не найдена – PythonNewBee

+0

Да, это хороший момент, извините. Вместо этого я заменил код на это понимание списка. – RoadRunner

+1

Это имеет смысл, однако как бы напечатать сообщение «не найдено», если не было соответствия – PythonNewBee

4
if item == search: 

Это условное не получится, потому что item является ["PlayerA", "10", "20"] и search является "PlayerA". Список никогда не будет сравниваться с строкой.

Попробуйте сравнить search с первым элементом item в частности.

if item[0] == search: 
2

Вам необходимо получить доступ к первому элементу или вложенному списку. Как это:

for player in players: 
    if player[0] == input: 
     return player 
4

Причина, по которой это печать «элемент не найден», потому что вы сравниваете подсписок в строку, чтобы найти, например,

["PlayerA", "10", "20"] == "PlayerA" 

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

Одним из способов вы можете сделать это, чтобы использовать filter так:

filter(lambda record: record[0] == "PlayerA", players) 

Это возвращает список записей с 0-й элемент соответствия «PlayerA».

Смежные вопросы