Python -значение из списка как аргумент другого списка - PullRequest
0 голосов
/ 14 апреля 2020

У меня проблема со списками, потому что я хочу получить значение из списка с именем test_table со значением из A_table в качестве аргумента. Есть ли способ получить правильный результат? Конечно, списки не пусты, и когда я запускаю его, я получаю Process finished with exit code -1073740791 (0xC0000409)

            for x in range(len(A_table)):
                print(test_table[A_table[x]])

Редактировать: List_A генерируется так: (Я думаю, что проблема заключается в строке типа не целое число, но с тип int моя функция не работает):

        A_letter = [find_all(sentence, 'A')]  
        A_string = ' '.join(map(str, A_letter[0]))
        data = A_string.split()  # split string into a list

        for temp in data:
            A_table.append(temp)

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Для начала, я не знаю, где определена эта функция 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, и вот еще одна ссылка на вопрос, который указывает ваша ошибка связана с повреждением памяти .

0 голосов
/ 14 апреля 2020

Это то, что вы пытаетесь сделать? Этот код просматривает test_list и, если значение найдено, печатает его, вызывая функцию list.index().

list_a =[1,2,3,4]
test_list = [3,5,8,9]

for i in range(len(list_a)):
  if list_a[i] in test_list:
    print(test_list[test_list.index(list_a[i])])
//output = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...