Python搜索嵌套列表

5

我有一个嵌套列表,名为“players”,如下所示:

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")

当我执行上述操作时,它一直打印“找不到项目”的信息。
提前多谢。
4个回答

5
它打印“未找到项目”的原因是因为您正在将子列表与要查找的字符串进行比较,例如:
["PlayerA", "10", "20"] == "PlayerA"

当然这是错误的。你需要从每个子列表中提取名称。
你可以使用filter完成这个任务,做法如下:
filter(lambda record: record[0] == "PlayerA", players)

这将返回一个记录列表,其中0号元素匹配"PlayerA"。


4
if item == search:

这个条件不会成功,因为item["PlayerA", "10", "20"],而search"PlayerA"。列表永远不会与字符串相等。
尝试具体比较searchitem的第一个元素。
if item[0] == search:

3

使用列表推导式过滤选手,将players中每个子列表的第一个项目与search中的选手名称进行比较:

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 == []: # or if not result
    print("item not found")
else:
    print(result)

2
您需要访问嵌套列表的第一个元素。 就像这样:
for player in players:
    if player[0] == input:
        return player

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接