Проблема с поиском

1

У меня есть два списка:

a= [['A', 'B', 'C', 3], ['P', 'Q', 'R', 4]]

b=[['K',1,1,1,1,1], ['L',1,1,1,1,1], ['M', 1,1,0,1,1], ['J', 0,0,0,0,0], ['A', 0,0,0,1,1], ['P',0,1,0,1,1 ]]

Мне нужен вывод:

Output=[['A', 0,0,0,1,1], ['P',0,1,0,1,1 ]]

Я пытаюсь выполнить поиск a в b, используя a [idx] [0]. Затем я хочу собрать эти элементы и хотел бы, чтобы Output что-то вроде выше.

Мой код выглядит так:

Output=[]
for idx in range(len(Test)):
    a_idx = [y[0] for y in b].index(a[idx][0])
    a_in_b = b[a_idx]
    Output.append(a_in_b[:])

print Output 

Это не дает мне желаемого результата. Кто-нибудь может помочь?

Теги:

2 ответа

1
Лучший ответ

В то время как эумиро ответ лучше, вы попросили версию, которая использует индекс. Моя версия работает последовательно:

a= [['A', 'B', 'C', 3], ['P', 'Q', 'R', 4]]
b=[['K',1,1,1,1,1], ['L',1,1,1,1,1], ['M', 1,1,0,1,1], ['J', 0,0,0,0,0], ['A', 0,0,0,1,1], ['P',0,1,0,1,1 ]]
src = [y[0] for y in b]; # I moved this out here so that it is only calculated once
Output = []
for i in range(len(a)):  # You have Test here instead??? Not sure why
     ai  = src.index( a[ i ][ 0 ] )
     Output.append( b[ ai ][:] )
  • 0
    Спасибо, что работает для меня.
9

Сначала преобразуем b в словарь:

b=[['K',1,1,1,1,1], ['L',1,1,1,1,1], ['M', 1,1,0,1,1], ['J', 0,0,0,0,0], ['A', 0,0,0,1,1], ['P',0,1,0,1,1 ]

d = dict((i[0], i[1:]) for i in b)

# d is now:
{'A': [0, 0, 0, 1, 1],
 'J': [0, 0, 0, 0, 0],
 'K': [1, 1, 1, 1, 1],
 'L': [1, 1, 1, 1, 1],
 'M': [1, 1, 0, 1, 1],
 'P': [0, 1, 0, 1, 1]}

Затем переведите d в a:

Output = [ i[:1] + d[i[0]] for i in a]

# Output is now: [['A', 0, 0, 0, 1, 1], ['P', 0, 1, 0, 1, 1]]
  • 0
    Я хотел бы использовать метод индекса . Любой другой способ использовать индекс для приведенного выше кода.
  • 4
    @user: метод index здесь менее эффективен. Почему вы хотите использовать это?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню