从2D列表中提取项目



我有以下2D列表

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

我想将用户输入与listtitem中每个列表中的第二个元素进行比较,如果值匹配,则打印整个列表。如果值不匹配,我将要求用户一次又一次地输入值。

下面是我的代码:
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()

我在这里遇到了一些问题。在listItem中,有两个"TP123"但是,如果用户输入"TP123",它只输出一个结果,而不是两个。但是如果我不使用break,代码会一直要求用户输入另一个值,即使他们输入的值是匹配的。

我是一个python初学者,谁能帮我解决这个问题,非常感谢。

使用一个额外的变量并将其设置为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()

在它找到下一项之前,您已经中断了。也不需要使用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)