還有一堆的方式來做到這一點。如果你有很多數據,那麼我建議你繼續使用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