Суть такая, мне нужен список(возможно любая другая коллекция) чтобы я мог быстро извлечь элементы которые подходят под два значение:
К примеру был бы список слов подходящих к определенной букве, и таких списков несколько, как мне иметь возможность получать например слово которое подходит к букве ю и имеет длину 5 букв, если такое есть
Python
Как в python получить элемент из списка по нескольким значениям
Если извлечь нужно именно _быстро_, то нужен словарь или словарь списков или словарь словарей.
Можно организовать, например, индекс по буквам:
По первой букве лезем в словарь, достаём список слов, а его уже можно перебрать линейным поиском. В списке лежат индексы слов в основном списке.
Также внутри индекса по буквам можно сделать индекс по длине:
Или можно сделать индекс сразу по паре: первая буква и длина:
Можно организовать, например, индекс по буквам:
from functools import reduce
main_list = ['яблоко', 'груша', 'апельсин', 'ананас']
letter_idx = reduce(lambda d, t: d | { t[1][0]: d.get(t[1][0], []) + [t[0]] }, enumerate(main_list), {})
print(letter_idx)
Результат: {'я': [0], 'г': [1], 'а': [2, 3]}
По первой букве лезем в словарь, достаём список слов, а его уже можно перебрать линейным поиском. В списке лежат индексы слов в основном списке.
Также внутри индекса по буквам можно сделать индекс по длине:
from functools import reduce
main_list = ['яблоко', 'груша', 'апельсин', 'ананас']
letter_idx = reduce(lambda d, t: d | { t[1][0]: d.get(t[1][0], {}) | {len(t[1]): t[0]} }, enumerate(main_list), {})
print(letter_idx)
Результат: {'я': {6: 0}, 'г': {5: 1}, 'а': {8: 2, 6: 3}}
По первой букве лезем в словарь, достаём другой словарь, и в нём ищем по длине. Результатом поиска является индекс в основном списке.Или можно сделать индекс сразу по паре: первая буква и длина:
main_list = ['яблоко', 'груша', 'апельсин', 'ананас']
letter_idx = { (s[0], len(s)): i for i, s in enumerate(main_list) }
(здесь рассчитано под хранение только одного значения по каждому ключу, иначе нужно хранить список, как в первом примере) {('я', 6): 0, ('г', 5): 1, ('а', 8): 2, ('а', 6): 3}
Вы можете использовать генераторы списков и методы `filter` и `lambda`, чтобы получить элементы списка, которые соответствуют двум условиям.
Например, если у вас есть список слов `words`, который вы хотите проверить по букве `c` и длине `7`, вы можете сделать это следующим образом:
```
words = ["cat", "dog", "crow", "crab", "coat"]
result = list(filter(lambda x: "c" in x and len(x) == 7, words))
print(result)
```
Вы получите список `["crimson"]`, поскольку только это слово подходит под оба условия.
Программа:
words = ["cat", "dog", "crow", "crab", "coat"]
result = list(filter(lambda x: "c" in x and len(x) == 7, words))
print(result)
Например, если у вас есть список слов `words`, который вы хотите проверить по букве `c` и длине `7`, вы можете сделать это следующим образом:
```
words = ["cat", "dog", "crow", "crab", "coat"]
result = list(filter(lambda x: "c" in x and len(x) == 7, words))
print(result)
```
Вы получите список `["crimson"]`, поскольку только это слово подходит под оба условия.
Программа:
words = ["cat", "dog", "crow", "crab", "coat"]
result = list(filter(lambda x: "c" in x and len(x) == 7, words))
print(result)
Похожие вопросы
- Программирование питона. Найди количество элементов в данном списке
- Проблема с программой типа "список" в Python
- Дан список чисел. Нужно посчитать количество их "пар" (т.е. "1 1 1 1 1" = 10, "1 2 3 2 3" = 2 и т.д.) (Python)
- Работа со списками Python. В одну строку.
- Задача со списками, Python
- Первый элемент списка — 1 буква 'а', последний — 33 буквы 'я'. Используй метод append().
- Python.Какой функцией можно вывести КОЛИЧЕСТВО четных элементов в массиве?
- Заполнить двухмерный список случайными числами python
- Сумма индексов элементов списка
- Как объявить список определенной длины в Python?