【问题标题】:multiple iteration of the same list同一列表的多次迭代
【发布时间】:2015-06-14 21:00:19
【问题描述】:

我有一个数据列表如下:

from shapely.geometry import box

data = [box(1,2,3,4), box(4,5,6,7), box(1,2,3,4)]
sublists = [A,B,C]

列表“数据”有以下子列表:

A = box(1,2,3,4)
B = box(4,5,6,7)
C = box(1,2,3,4)

我必须检查子列表是否相交。如果相交,它们应该放在一个元组中;如果不相交,则应放入不同的元组。预期结果是:

result = [(A,C), (B)]

怎么做?

我试了一下:

results = []
for p,c in zip(data,sub_lists):
    for x in data:
        if p.intersects(x): ##.intersects return true if they overlap else false
            results.append(c)
print results

【问题讨论】:

  • 对于我们这些没有使用过shapely的人来说,box()返回的对象可以做什么?这是一个关于比较/迭代 Python 列表的问题,还是关于使用 shapely 的问题。 'numpy' 是如何进入方程的?
  • @hpaulj 关于 python 列表。但 shapely 用于测试相交。 box() 返回匀称的多边形。

标签: python python-2.7 python-3.x numpy shapely


【解决方案1】:

不用下载shapely,我想你想对列表做的事情可以用字符串(或整数)复制:

In [221]: data=['one','two','three']    
In [222]: data1=['one','four','two']

In [223]: results=[[],[]]
In [224]: for i in data1:
    if i in data:
        results[0].append(i)
    else:
        results[1].append(i)
   .....:         

In [225]: results
Out[225]: [['one', 'two'], ['four']]

用您的intersects 测试替换i in dataresults 的第一个子列表包含 data1 中测试为真的元素。第二个子列表包含它为假的元素。

您的问题有点令人困惑,因为 datasublists 似乎包含相同的元素。所以也许你不是在测试A 是否在data 中(或与data 的元素相交),而是A 是否与[A,B,C] 的其他元素相交,等等。

无论如何,收集结果的关键是在results 中有两个(或更多)插槽,您可以根据测试将i 放入其中。 results 也可以是字典,也可以是两个不同的变量。例如results={'found':[],'lost':[]}.

我们需要在测试上做更多工作吗?

A 'intersects with' any of [B,C]
B 'intersects with' any of [A,C]
C 'intersects with' any of [A,B]

【讨论】:

    猜你喜欢
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多