У меня есть список:

letters = ('1', '2', '3', '5', '8', '13', '21')

Имея номер 8, я могу получить его индекс в виде букв: { { Х1 }}

Нет, у меня есть массив, который содержит только цифры, которые написаны буквами.

numbers = [3, 8, 13, 21, 5]

Как мне вызвать индексную (или похожую) функцию для каждого элемента?

Я хочу получить [2, 4, 5, 6, 3]

Есть ли такая функция, как индекс, которая может захватывать массив вместо одного элемента? Если это требуется, буквы можно заменить на массив

0
John Tera 8 Дек 2016 в 18:33

3 ответа

Лучший ответ

Ты можешь попробовать

letters = ('1', '2', '3', '5', '8', '13', '21')
numbers = [3, 8, 13, 21, 5]

result = [letters.index(str(n)) for n in numbers]

Но это работает, только если все запросы присутствуют в letters

Вы можете попробовать это, чтобы проверить, если запрос в letters

[letters.index(str(n)) if str(n) in letters else -1 for n in numbers]

Если запрос не letters, у вас будет -1. Помните, что -1 здесь, чтобы указать, что запрос отсутствует. letters[-1] возвращает последний элемент кортежа.

1
Guillaume Jacquenot 8 Дек 2016 в 15:43

Мне нравится использовать функции map - это большая проблема, чтобы применить новую технику.

def get_index(letters, element):
    return letters.index(str(element))

indices_of_numbers = list(map(get_index, numbers))

Мы могли бы обернуть это в функцию, чтобы мы могли удалить аргумент letters из get_index.

def get_indices_of_numbers(letters, numbers):
    def get_index(element):
        return letters.index(str(element))

    indices_of_numbers = list(map(get_index, numbers))
    return indices_of_numbers
1
Chinny84 8 Дек 2016 в 15:54

Вы можете преобразовать letters в массив int, а затем использовать np.searchsorted -

np.asarray(letters,dtype=int).searchsorted(numbers)

Пробный прогон -

In [42]: letters = ('1', '2', '3', '5', '8', '13', '21')

In [43]: numbers = [3, 8, 13, 21, 5]

In [44]: np.asarray(letters,dtype=int).searchsorted(numbers)
Out[44]: array([2, 4, 5, 6, 3])

Если letters таков, что версия массива int не отсортирована, нам нужно ввести дополнительный аргумент sorter с searchsorted.

1
Divakar 8 Дек 2016 в 18:34