还有一堆的方式来做到这一点。如果你有很多数据,那么我建议你继续使用python的内置sqlite支持来处理基于数据库的实现(实际上并不困难)。数据库引擎专用于搜索。由于每人可以有多种颜色,因此您需要两张桌子。人员表格将具有以下列:id,名称,模型,状态。颜色表将具有:人物,颜色。 personid列将包含颜色表中的行对应的id号。然后,您可以在具有相同personid值(这是列表的数据库版本)的颜色表中包含多行。 sqlAlchemy是一个库,用于帮助您使用python对象实现数据库,您可能会发现它更适合您正在尝试的操作。 sqlAlchemy ORM Tutorial将引导您使用带有两个表(用户,地址)的sqlite数据库,这些表与您需要的非常相似。
现在如果你想坚持独立Python类,你将不得不让人们实例的列表,并遍历它们都在寻找匹配。简单的颜色匹配方法是将颜色列表转换为集合并进行交集。
>>> s1 = set(['red','blue','yellow'])
>>> s2 = set(['red','blue'])
>>> s1.intersection(s2)
set(['blue', 'red'])
迭代通过人员实例列表的快捷方式是使用python的itertools库并使用排列生成器。
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')
感谢这么多...帮助很大。 – jerrygo 2010-07-19 18:08:28