如何比较集合中的值并在python中重写它们

如何比较集合中的值并在python中重写它们,python,set,overwrite,Python,Set,Overwrite,这是我的密码 我定义了一个空集,我想比较 se([i])>0,然后将se([i])的值重新指定为0。我不能这样做 由于se([i])是一个集合,无法与int进行比较。请帮助。我是python编程新手 se =set() se.update([8]) print (se) for i in range (10): se.update([i]) print type(se) print len(se) print se 如果您只是尝试将se的每个元素与0进行比较,并将>0的

这是我的密码 我定义了一个空集,我想比较
se([i])>0
,然后将
se([i])
的值重新指定为
0
。我不能这样做 由于
se([i])
是一个集合,无法与int进行比较。请帮助。我是python编程新手

se =set()
se.update([8])
print (se)
for i in range (10):
    se.update([i])
    print type(se)
    print len(se)
print se

如果您只是尝试将
se
的每个元素与
0
进行比较,并将
>0
的元素替换为
0
,这非常简单:

se = {0 if element > 0 else element for element in se}
或者,如果你仔细想想:

se = {min(element, 0) for element in se}
通过索引
se[i]
无法做到这一点,因为集合是不可索引的,因为集合(数学和Python)的全部要点是它们是无序的。你肯定不能调用
se([i])
,因为你
set
s不是函数,也不是其他可调用的(类似函数的)东西。如果你真的想通过就地突变来实现,你可以:

for element in se.copy():
    if element > 0:
        se.remove(element)
        se.add(0)
(注意这里的
se.copy()
在迭代集合时不能更改集合的形状,因此需要迭代集合的副本。)

同时,同样,集合的全部要点是它是无序的,这意味着多次添加
0
与一次添加完全相同。因此:

>>> se = { -3, -2, -1, 0, 1, 2, 3 }
>>> print se
set([0, 1, 2, 3, -1, -3, -2])
>>> se = {min(element, 0) for element in se}
>>> print se
set([0, -2, -3, -1])
或者,使用您的代码(为了简洁起见,删除了一些额外的
print
语句):


作为旁注,为什么您要执行
se.update([i])
而不是只执行
se.add(i)
?什么是“我想比较se([i])>0,然后将se([i])的值重新指定为0”的意思?更重要的是:您的意思是“我想比较se([i])>0”?没有所谓的
se([i])
set
s不可调用,也不可索引,所以我猜不出您在这里想做什么。“重新分配”部分也是如此。您希望将什么与>0进行比较,您希望将什么分配给0,以及在什么情况下您希望分配它?我不确定您最终想要实现什么。无论是将集合与整数进行比较,还是尝试通过访问检索集合中的项,都是有意义的。
>>> se =set()
>>> se.update([8])
>>> print (se)
set([8])
>>> for i in range (10):
...     se.update([i])
>>> print se
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> se = {min(element, 0) for element in se}
>>> print se
set([0])