2014-10-26 2 views
0

У меня есть два списка целых чисел Python: x и y. Все элементы x появляются где-то в y, и только один раз. Для каждого элемента из x, я хочу знать индекс соответствующего значения в y. Затем я хочу установить эти индексы в список z.Поиск индексов значений одного списка в другом списке

Приведенный ниже код работает, как я только что описал. Однако, кажется, немного неуклюжий для задачи, которая, как я подозреваю, может иметь более элегантное решение всего за пару строк или около того. Поэтому, мой вопрос: каково наименьшее количество строк, в которых можно переписать следующий код?

z = [0 for i in range(len(x))] 
for i, j in enumerate(x): 
    for k, l in enumerate(y): 
     if j==l: 
      z[i] = k 
      break 
+0

Списки действительно имеют '.index)' метода (. –

ответ

4

Вот один из способов сделать это:

z = [y.index(i) for i in x] 
+0

Вот как это сделать. –

+1

Обратите внимание, что, хотя это может не быть проблемой на практике для небольших списков, это имеет квадратичное поведение и поэтому будет медленным для больших. (Вы завершаете сканирование 'len (x)' раз через 'y', когда вам действительно нужно сделать это только один раз.) – DSM

Смежные вопросы