【发布时间】:2015-05-01 14:01:07
【问题描述】:
我有一个对象列表(矩形)。每个对象有 2 个属性(高度和宽度)。我想得到这个列表的所有“方向”(不知道如何准确地调用它),所以所有 2^n(对于 n 个矩形的列表)方向,其中矩形的高度和宽度(可能)交换.对于 3 个对象的列表,它看起来像这样(顺序并不重要):
[R1(w, h), R2(w2, h2), R3(w3, h3)]
[R1(w, h), R2(w2, h2), R3(h3, w3)]
[R1(w, h), R2(h2, w2), R3(w3, h3)]
[R1(w, h), R2(h2, w2), R3(h3, w3)]
[R1(h, w), R2(w2, h2), R3(w3, h3)]
[R1(h, w), R2(w2, h2), R3(h3, w3)]
[R1(h, w), R2(h2, w2), R3(w3, h3)]
[R1(h, w), R2(h2, w2), R3(h3, w3)]
我的矩形类如下所示:
class Rectangle:
def __init__(self, height, width):
self.height = height
self.width = width
def place(self):
"""Method to place tile in a larger grid"""
def remove(self):
"""Method to remove tile from larger grid"""
有没有简单的方法可以做到这一点?
【问题讨论】:
-
我部分理解了您的问题,但数据不足以为您所谈论的问题奠定坚实的基础。能说清楚点吗?
-
我有一个对象列表(矩形)。这些矩形可以旋转(交换高度和宽度)。对于 8 个矩形的列表,这会导致 8 个矩形有 2^8 个不同的方向。有没有一种简单的方法来生成这 2^8 个不同的方向?希望这能让它更清楚一点..
-
[[R1(w, h), R2(w, h), R3(w, h)] for _ in range(2**len([R1(w, h), R2(w, h), R3(w, h)]))]应该可以工作。您可以将该列表存储在变量中并使用它。 -
这听起来像是itertools 的工作,特别是
product方法。您还需要一个可以接收矩形并返回转置(旋转)矩形的函数或方法。但这应该很容易做到。您可以在问题中添加矩形类的定义吗?如果您的实际课程很复杂,只需发布一个精简版,以便我们了解如何访问宽度和高度属性。 -
这是一个好的开始:
product([orientation1,orientation2], repeat=len(objects))
标签: python list object attributes swap