【发布时间】:2014-05-20 04:59:21
【问题描述】:
我有如下三个输入列表:
fill_rgn_pts = [[0,1,2,3,4,5,6,7],[0,1,2,3,4,5],[0,1,2,3],[0,1,2,3]]
fill_rgn = [[region1],[region2],[region3],[region4]]
rooms = [[room1],[room2],[room3],[room4],[room5],[room6]]
我正在尝试根据房间内是否包含所有 fill_rgn_pts 来配对 fill_rgn 和房间。到目前为止,这是我尝试过的:
valid_rooms, valid_fill_rgn, invalid_rooms = [], [], []
for i in rooms:
for list, region in zip(fill_rgn_pts, fill_rgn):
if all(i.IsPointInRoom(j) == True for j in list):
valid_rooms.append(i)
valid_fill_rgn.append(region)
else:
invalid_rooms.append(i)
OUT = valid_fill_rgn, valid_rooms, invalid_rooms
我从中得到的是三个列表:
valid_fill_rgn = [[region1],[region2],[region3],[region4]]
valid_rooms = [[room1],[room2],[room3],[room4]]
invalid_rooms = [[room1],[room1],[room1],[room2],[room2],[room2],[room3],[room3],[room3],[room4],[room4],[room4],[room4],[room5],[room5],[room5],[room6],[room6],[room6],[room6]]
前两个列表看起来正是我想要的,因为它们按照我的预期配对了一个区域和房间。然而,第三个列表返回了太多的项目。我为每个房间获得了三个额外的值,这让我觉得我正在迭代一些我不应该迭代的东西。想法?
【问题讨论】:
-
list对于变量来说是一个糟糕的选择,因为它会影响内置的list()。 -
好点,菜鸟的错误我会改正的。
-
regionX和roomX是什么?自定义对象? -
是的,房间是自定义对象,区域也是。 IsPointInRoom 是一个检查点是否包含在房间中的类(它来自 Revit API 一个 3D 建模软件)。那些运作良好。我想我在这里有一个列表理解问题。
-
@Bachmann - 除非
IsPointInRoom中的某些内容可能会返回一些真实的东西,而这在某些时候实际上并不是True。否则,我同意。
标签: python list loops iteration