同一个列表的多次迭代
multiple iteration of the same list
我有一份数据清单如下:
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]
列表 'data' 有以下子列表:
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
,我认为你想对列表执行的操作可以用字符串(或整数)复制:
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']]
将 i in data
替换为您的 intersects
测试。 results
的第一个子列表包含测试为真的 data1
的元素。第二个子列表包含错误的元素。
您的问题有点令人困惑,因为 data
和 sublists
似乎包含相同的元素。所以也许你不是在测试 A
是否在 data
中(或与 data
的元素相交),而是 A
是否与 [=23 的另一个元素相交=],等等
在任何情况下,收集结果的关键是在 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]
我有一份数据清单如下:
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]
列表 'data' 有以下子列表:
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
,我认为你想对列表执行的操作可以用字符串(或整数)复制:
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']]
将 i in data
替换为您的 intersects
测试。 results
的第一个子列表包含测试为真的 data1
的元素。第二个子列表包含错误的元素。
您的问题有点令人困惑,因为 data
和 sublists
似乎包含相同的元素。所以也许你不是在测试 A
是否在 data
中(或与 data
的元素相交),而是 A
是否与 [=23 的另一个元素相交=],等等
在任何情况下,收集结果的关键是在 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]