Для начала, я не знаю, где определена эта функция find_all
, но если она ведет себя как re.findall
(которую вы, вероятно, должны использовать), то она уже возвращает список, поэтому, определив A_letter = [find_all(sentence, 'A')]
, у вас есть список из списка совпадений.
Рассмотрим этот пример:
>>> import re
>>> sentence = 'A wonderful sample of A test string'
>>> re.findall('A', sentence)
['A', 'A']
Продолжая, ваш A_table
имеет list
из str
. Так что нет прямого способа индексировать в другой список, используя значения внутри A_table
. Например, даже если test_table
имеет значения ['A', 'B', 'C']
, допустимые значения индекса по-прежнему равны «0», «1» и «2», т. Е. Я не могу получить test_table['A']
, поскольку списки могут индексироваться только с помощью int
.
Если вы хотите получить индекс определенного значения (например, «A») в списке, вы можете использовать функцию index
для list
, которая возвращает первый индекс предоставленное значение или увеличивает ValueError
, если значение не найдено.
Например:
>>> import re
>>>
>>> test_table=['Q','F','R','A','B','X']
>>>
>>> sentence = 'A wonderful sample of A test string'
>>> A_table = re.findall('A', sentence)
>>>
>>> for match in A_table:
... # first check to ensure the match is in the test_table
... if match in test_table:
... # ok, I know it is here, so get the index
... i = test_table.index(match)
... v = test_table[i]
... print(f'index [{i}] has value [{v}]')
...
index [3] has value [A]
index [3] has value [A]
Редактировать: Вот еще немного информации о функции .index
, и вот еще одна ссылка на вопрос, который указывает ваша ошибка связана с повреждением памяти .