gpt4 book ai didi

Python算法——根据对象属性从列表中挑选对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:33:37 24 4
gpt4 key购买 nike

我有一个自定义的 Python 对象,例如:

    ID - string    
Name - string
Unit - string
Weight - float

我将所有可能的对象都放在一个列表中。 Unit 属性可以是 A-F 中的字符串值。我需要将此列表分解为所有可能的对象组合,这些对象具有 1 个 Unit=A 对象、1 个 Unit=B 对象,一直到 F,但对于 F,我需要 3 个对象,其中 Unit= F。所有新列表都需要包含唯一项(即 Unit=F 对象需要是唯一的)并且所有结果列表也需要是唯一的。我完全不知道如何创建这样的算法。有人可以提供一些想法和/或伪代码吗?

最佳答案

您可能会发现 itertools在这种情况下非常有帮助,特别是函数 itertools.productitertools.combinations .

下面是根据您的描述创建的示例:

from itertools import product, combinations

class Blob:

def __init__(self, ID, Name, Unit, Weight):
self.ID = ID
self.Name = Name
self.Unit = Unit
self.Weight = Weight

def __repr__(self):
return 'Object: ID={ID}, Name={Name}, Unit={Unit}, Weight={Weight}'.format(Name=self.Name, ID=self.ID, Unit=self.Unit, Weight=self.Weight)

blobs = [Blob(1, 'AA', 'A', 1.0),
Blob(2, 'AA', 'A', 1.0),
Blob(3, 'AA', 'B', 1.0),
Blob(4, 'AA', 'B', 1.0),
Blob(5, 'AA', 'C', 1.0),
Blob(6, 'AA', 'C', 1.0),
Blob(7, 'AA', 'D', 1.0),
Blob(8, 'AA', 'D', 1.0),
Blob(9, 'AA', 'E', 1.0),
Blob(10,'AA', 'E', 1.0),
Blob(11,'AA', 'F', 1.0),
Blob(12,'AA', 'F', 1.0),
Blob(13,'AA', 'F', 1.0),
Blob(14,'AA', 'F', 1.0)]

# Break down into selectable sub-groups by unit name
groups = {k: [b for b in blobs if b.Unit==k] for k in ['A','B','C','D','E','F']}
# Special treatment for unit F: expand to combination chunks of length 3
groups['F'] = combinations(groups['F'], 3)
# Create the list of all combinations
selected = list(product(*groups.values()))

一些示例输出:

>>> selected[0]
(Object: ID=1, Name=AA, Unit=A, Weight=1.0,
Object: ID=5, Name=AA, Unit=C, Weight=1.0,
Object: ID=3, Name=AA, Unit=B, Weight=1.0,
Object: ID=9, Name=AA, Unit=E, Weight=1.0,
Object: ID=7, Name=AA, Unit=D, Weight=1.0,
(Object: ID=11, Name=AA, Unit=F, Weight=1.0,
Object: ID=12, Name=AA, Unit=F, Weight=1.0,
Object: ID=13, Name=AA, Unit=F, Weight=1.0))

>>> selected[1]
(Object: ID=1, Name=AA, Unit=A, Weight=1.0,
Object: ID=5, Name=AA, Unit=C, Weight=1.0,
Object: ID=3, Name=AA, Unit=B, Weight=1.0,
Object: ID=9, Name=AA, Unit=E, Weight=1.0,
Object: ID=7, Name=AA, Unit=D, Weight=1.0,
(Object: ID=11, Name=AA, Unit=F, Weight=1.0,
Object: ID=12, Name=AA, Unit=F, Weight=1.0,
Object: ID=14, Name=AA, Unit=F, Weight=1.0))

您可能希望使用 F 来展平元素作为最终列表中的单位。

关于Python算法——根据对象属性从列表中挑选对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22753674/

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