2013-12-20 4 views
3

Привет всем У меня проблема в Python. Я пытаюсь создать новый список, используя два возврата от предыдущих функций. Я хотел бы взять каждый элемент в списке элементов и проверить, является ли это первой записью, по крайней мере, в одном из двух дубликатов. Если это так, добавьте соответствующий номер в список 'vector'. Если элемент не отображается в списке дубликатов, я бы добавил «0».сопоставление строки со списком кортежей

Пример: Используя эти два списка:

duple_list=[('C', 1), ('H', 4)] 

element_list=['C', 'H', 'N'] 

должен возвращать вектор, как:

[1, 4, 0] 

мой текущий код возвращает вместо этого:

[1, 0, 4, 0, 0] 

текущий код:

for element in element_list: 
    for duple in duple_list: 
      if element==duple[0]: 
       vector.append(duple[1]) 
       break 
      if element!=duple[0]: 
       vector.append(0) 
return vector 

Я знаю, почему мой код не работает, но я не знаю, какой инструмент я должен использовать вместо этого/что я должен делать по-другому.

+0

Я не понимаю, как вы можете иметь только 5 номеров в вашем векторе, с током версию вашего кода. Не должно быть 6 номеров? (2 в списке разрешенных номеров 3 в списке элементов). – Theox

+1

Причина в том, что есть только пять чисел из-за «перерыва». Он останавливает цикл for, поскольку утверждение if утвердительно. Это позволяет избежать следующего утверждения if. Если строка «break» была удалена, она вместо этого будет читать: '[1, 0, 0, 4, 0, 0]' – user3121989

ответ

4
>>> [dict(duple_list).get(e, 0) for e in element_list] 
[1, 4, 0] 

Шаги без учета списка. Создание dict из списка кортежей:

>>> duple_dict = dict(duple_list) 
>>> duple_dict 
{'H': 4, 'C': 1} 

и проверить каждый элемент из element_list для содержания в duple_dict:

>>> vector = [] 
>>> for element in element_list: 
     if element in dict(duple_dict): 
      vector.append(duple_dict[element]) 
     else: 
      vector.append(0) 

>>> vector 
[1, 4, 0] 
Смежные вопросы