Извлечение элементов из 2D-списка

#python #list

Вопрос:

У меня есть следующий 2D список

 listItem = [["Apple", "TP123", "67", "77"], [ "Orange", "TP223", "55", "66"], ["Banana", "TP777", "98", "88"], ["Cherry", "TP123", "98", "88"]]  

Я хочу сравнить ввод пользователя со вторым элементом в каждом списке в списке и распечатать весь список, если значение совпадает. Если значение не совпадает, я буду просить пользователя вводить значение снова и снова.

Вот мой код:

 def repeat():  tp = input("Please enter your tp: ")  for i in range(len(listItem)):  if tp == listItem[i][1]:  print(listItem[i])  break  else:  repeat()  

Здесь я сталкиваюсь с некоторыми проблемами. В списке есть два «TP123». Однако, если пользователь вводит «TP123», он выводит только один результат вместо двух. Но если я не использовал разрыв, код будет продолжать запрашивать у пользователей другое значение, даже если введенное ими значение совпадает.

Я новичок в python, может ли кто-нибудь помочь мне решить эту проблему, большое вам спасибо.

Ответ №1:

Используйте дополнительную переменную и установите ее True равной, если они совпадают, и используйте if оператор для повторного запуска repeat функции, если она False :

А также лучше без range :

 def repeat():  tp = input("Please enter your tp: ")  match = False  for i in listItem:  if tp == i[1]:  print(i)  match = True  if not match:  repeat()  

Ответ №2:

Вы ломаетесь прежде, чем он сможет найти следующий предмет. Также не нужно использовать range просто цикл по списку.

 def repeat():  tp = input("Please enter your tp: ")  print(*(i for i in listItem if i[1] == tp), sep='n')  

Или в полном for цикле:

 def repeat():  tp = input("Please enter your tp: ")  for i in listItem:  if tp == i[1]:  print(i)