У меня есть список списков как таковой:
allTeams = [ [57, 'Arsenal FC', 'Arsenal', 'ARS'], [58, 'Aston Villa FC', 'Aston Villa', 'AVL'], [61, 'Chelsea FC', 'Chelsea', 'CHE'], ...]
userIsLookingFor = "chelsea"
for team in allTeams:
if userIsLookingFor.lower() in any_element_of_team.lower():
print(team)
> [61, 'Chelsea FC', 'Chelsea', 'CHE']
В основном я искал запрошенное пользователем слово в списке списков, и если есть совпадение, я печатал этот список. В приведенном выше случае пользователь ищет «челси», и в одном из списков есть совпадение для «челси» (либо «Челси», либо «Челси», не имеет значения). Поэтому я бы вернул этот конкретный список.
Я пытался использовать «любой», но, похоже, он возвращает только логическое значение, и я не могу распечатать из него какой-либо список.
Я предполагаю, что если я сделаю .split() для элементов, таких как ['Chelsea FC'] --> ['Chelsea', 'FC'], но, честно говоря, это не имеет большого значения. Я не возражаю, если он просто соответствует тому, у которого нет «FC».
Вы можете использовать понимание списка:
userIsLookingFor = "chelsea"
# option 1, exact match item 2
[l for l in allTeams if l[2].lower() == userIsLookingFor]
# option 2, match on any word
[l for l in allTeams
if any(x.lower() == userIsLookingFor
for s in l if isinstance(s, str)
for x in s.split())
]
выход:
[[61, 'Chelsea FC', 'Chelsea', 'CHE']]
должен ли "Челси" соответствовать "Челси"?