gpt4 book ai didi

Python面向对象模型

转载 作者:行者123 更新时间:2023-11-28 21:30:15 24 4
gpt4 key购买 nike

我有类似以下内容。

拥有属于某个州的多种颜色的同一型号汽车的人。

我设计了一个具有属性人名汽车型号汽车年份汽车状态的人员类> 和汽车颜色 作为属性。颜色应该是一个列表,因为一个人可以拥有许多不同颜色但型号相同的汽车。

现在我如何找到并打印 2 个不同的人,他们拥有相同型号的汽车和相同颜色的汽车,但在面向对象的术语中属于不同的州?

我是 Python 新手。

在将颜色插入到 person 对象中时,如何插入到列表中以及如何从列表中检索?我知道如何对属性执行此操作,但我对列表操作有点困惑。

数据可以是这样的:

person1 ford   [red,blue,yellow] new-york
person2 honda [red,blue] new-york
person3 ford [red,grey] california
person4 ford [red] california
person5 honda [red] new-york

现在我的结果应该是:

[(person1,person5)]    (same model car,same color, different state)

最佳答案

您想了解一些有关列表操作的信息:

$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> l=[]
>>> l.append("honda")
>>> l.append("ford")
>>> l
['honda', 'ford']
>>> l[0]
'honda'
>>> l.pop(0)
'honda'
>>> l.pop(0)
'ford'
>>> l.pop(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop from empty list

如果你想找到几个具有匹配属性的人,你可以做一些迭代(这里用一些伪代码表示,因为我认为重点在于该算法比专注于 python 来实现它更有用):

results = []
foreach p1 in [list of people]
foreach p2 in [list of people]
next if p1 == p2
next if p1.state == p2.state
next unless p1.car == p2.car
foreach c1 in p1.colors
foreach c2 in p2.colors
results.append((p1,p2)) if c1 == c2

此代码比较两个人。它不会将一个人与他们自己。它不会比较生活在同一州的人,因为你要求“..但属于不同的州”。所以让我们过滤那些相同状态的人们出去。它只比较拥有相同类型汽车的人。 (如果人们拥有不同类型的汽车,那么你只需添加两个嵌套的循环。)然后它会记录具有相同汽车颜色的两对人。

这个算法有一个潜在的错误:它会报告[(person1, person2),
(人物2,人物1)]
。因此条目是重复的。可以修改一下如果您不这样做,则仅搜索人员的上三角或下三角的算法想要这个重复:

results = []
for i=0; i<people.last_index-1; i++
for j=i+1; j<people.last_index ; j++
p1 = people[i] ; p2 = people[j]
next if p1.state == p2.state
next unless p1.car == p2.car
foreach c1 in p1.colors
foreach c2 in p2.colors
results.append((p1,p2)) if c1 == c2

请注意,我们可以删除 next if p1 == p2 检查,因为我们明确不能得到i == jj 定义为以 i+1 开头。

关于Python面向对象模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3277404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com