Как подсказывает @ coldspeed , использование набора для проверки существования букв обеспечивает оптимальный O (1) поиск.
Если вы не хотите использовать какие-либо встроенные функции, такие как any()
, сначала создайте функцию, которая проверяет, существует ли первая буква каждого внутреннего списка подсписков:
valid = {"A", "B", "L"}
def check_valid(sublst):
for fst, *_ in sublst:
if fst not in valid:
return False
return True
Или без распаковки кортежей, если вы предпочитаете:
def check_valid(sublst):
for lst in sublst:
if lst[0] not in valid:
return False
return True
Затем вы можете восстановить новый список с отфильтрованными неверными списками:
result = []
for sublst in lists:
if check_valid(sublst):
result.append(sublst)
print(result)
# [[['L', 5], ['B', 20], ['A', 10]], [['L', 5], ['L', 6]], [['A', 10], ['L', 12], ['A', 11], ['A', 15]]]
Или как списочное понимание:
result = [sublst for sublst in lists if check_valid(sublst)]
print(result)
# [[['L', 5], ['B', 20], ['A', 10]], [['L', 5], ['L', 6]], [['A', 10], ['L', 12], ['A', 11], ['A', 15]]]
Примечание: Всегда лучше использовать встроенные функции для удобства, поскольку это избавляет вас от необходимости заново изобретать колесо и обычно приводит к более короткому и краткому коду.