Есть множество способов сделать это. Если у вас много данных, я бы порекомендовал вам заняться реализацией на основе базы данных, используя встроенную в Python поддержку sqlite (что на самом деле не так сложно). Механизм базы данных специально создан для поиска. Вам понадобятся две таблицы, так как вы можете иметь несколько цветов на человека. Таблица person будет иметь следующие столбцы: id, имя, модель, состояние. Таблица цветов будет иметь: лицо, цвет. Столбец personid будет содержать идентификационный номер, которому соответствует строка в таблице цветов. После этого вы можете иметь несколько строк в таблице цветов с одним и тем же значением personid (которое является версией списка в базе данных). sqlAlchemy - это библиотека, помогающая реализовать базу данных с использованием объектов Python, которые вы можете найти более подходящими для того, что вы пытаетесь сделать. sqlAlchemy ORM Tutorial проведет вас через работу с базой данных sqlite с двумя таблицами (пользователи, адреса), которые очень похожи на то, что вам нужно.
Теперь, если вы хотите придерживаться только классов Python, вам нужно будет иметь список экземпляров людей и перебирать их все в поисках совпадений. Удобное упрощение для вашего соответствия цветов состоит в том, чтобы преобразовать списки цветов в наборы и сделать пересечение.
>>> s1 = set(['red','blue','yellow'])
>>> s2 = set(['red','blue'])
>>> s1.intersection(s2)
set(['blue', 'red'])
Сокращение для вашей итерации по списку людей состоит в том, чтобы использовать библиотеку itertools в python и использовать генератор перестановок.
from itertools import permutations
people = ['p1', 'p2', 'p3']
for p1, p2 in itertools.permutations(people,2):
print p1, p2
p1 p2
p1 p3
p2 p1
p2 p3
p3 p1
p3 p2
Надеюсь, этого достаточно, чтобы помочь вам на вашем пути. Перечитывая ваш вопрос, похоже, вам, возможно, придется больше читать по программированию на python. Но чтобы ответить на ваш вопрос о списках, нужно немного кода, который может вам помочь.
class Person(object):
def __init__(self, name, model, colors, state):
self.name = name
self.model = model
self.colors = colors
self.state = state
p1 = Person('p1', 'ford', ['red', 'blue'], 'new-york')
p2 = Person('p2', 'honda', ['red', 'blue'], 'new-york')
persons = [p1, p2]
# or
persons = []
persons.append(p1)
persons.append(p2)
p1.color.append('yellow')
# or
persons[0].color.append('yellow')