Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在循环集合时删除某些项_Python_Loops_Set - Fatal编程技术网

Python 在循环集合时删除某些项

Python 在循环集合时删除某些项,python,loops,set,Python,Loops,Set,我想要像这样的东西: 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) 如何满足我的要求?你可以这样试试 myset = { item for item in

我想要像这样的东西:

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)
如何满足我的要求?

你可以这样试试

myset = { item for item in myset if item<tr}
或者

您可以使用和:


正如您所看到的,所有大于tr的内容都将被删除。

这样做的问题是,在对集合进行迭代时,您无法在适当的位置修改集合,因此您需要进行筛选并重新分配到my_集合。有很多方法可以做到这一点

例1:理解

示例2:过滤器

示例2a:带lambda的过滤器

示例3:For循环

因此,如果我们将2A应用于您的代码,大概是因为您没有显示太多变量定义:

def calc_len(node):
    #return the length here using your calculation

A_nodes = filter(lambda x: calc_len(x) < th, A_nodes)

这是一个列表,不是一个集合。顺便说一句,如果if块中有很多行,那么列表理解可能不是一个好主意{item for item in myset if item您可以用生成器表达式替换列表理解,即去掉方括号。set不需要列表,只需要一个iterable。问题是if块中有许多行,而不仅仅是item编辑您的问题,以显示if块中许多行的含义。谁否决了我的问题?为什么e函数将返回???@iCodez回答者要求我更改它,以便详细说明。。。
>>> 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}
>>>
my_set = {item for item in myset if item < tr }
def my_filter(item):
    item < tr

my_set = filter(my_filter, my_set)
my_set = filter(lambda x: x < tr, my_set)
new_set = {}
for item in my_set:
    if item < tr:
        new_set.add(item)
my_set = new_set
def calc_len(node):
    #return the length here using your calculation

A_nodes = filter(lambda x: calc_len(x) < th, A_nodes)