我想要类似的东西:
for node_a in A_nodes:
a_pos = A.node[node_a]['pos']
link_len = math.sqrt((a_pos[0]-a_base_pos[0])**2+(b_pos[1]-b_base_pos[1])**2)
if link_len < th:
A_nodes.remove(node_a)
如何满足我的要求?
答案 0 :(得分:4)
你可以这样试试,
myset = { item for item in myset if item<tr}
或者,
new_set = {}
for item in myset:
if item < tr:
new_set.add(item)
myset = new_set
答案 1 :(得分:2)
您可以使用set.intersection
和range
:
>>> tr = 5
>>> myset = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> myset.intersection(range(tr + 1))
{1, 2, 3, 4, 5}
>>> myset & set(range(tr + 1))
{1, 2, 3, 4, 5}
>>>
如您所见,删除了大于tr
的所有内容。
答案 2 :(得分:1)
您将遇到的问题是,在迭代它时,您无法修改集合,因此您需要过滤并重新分配给my_set。有很多方法可以做到这一点。
示例1:理解
my_set = {item for item in myset if item < tr }
示例2:过滤
def my_filter(item):
item < tr
my_set = filter(my_filter, my_set)
示例2a:使用lambda 过滤
my_set = filter(lambda x: x < tr, my_set)
示例3:For循环
new_set = {}
for item in my_set:
if item < tr:
new_set.add(item)
my_set = new_set
因此,如果我们将2A应用于您的代码,大致是因为您没有显示很多变量定义:
def calc_len(node):
#return the length here using your calculation
A_nodes = filter(lambda x: calc_len(x) < th, A_nodes)