如果你只是想的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
不是函数或其他可调用的函数。如果你真的想通过地方突变为做到这一点,你可以:
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 =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])
作为一个侧面说明,你为什么这样做'se.update([I] )'而不是只是'se.add(i)'? – abarnert
“我想比较se([i])> 0,然后重新分配se([i])的值为0”是什么意思? –
更重要的是:你是什么意思“我想比较se([i])> 0”?没有'se([i])'这样的东西; 'set's不可调用,也不可转位,所以我无法猜测你在这里做什么。同样也适用于“重新分配”部分。你想比较什么> 0,你想分配给0什么,在什么情况下,你想分配它? – abarnert