2013-01-17 41 views
0

改写他们在这里是我的代码 我定义一个空集,我想比较 se([i]) > 0,然后重新分配的se([i])值是0。我无法做到这一点 因为se([i])是一个集合,不能与int进行比较。善意帮助。我是python编程新手。如何设定比较值,并在Python

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

作为一个侧面说明,你为什么这样做'se.update([I] )'而不是只是'se.add(i)'? – abarnert

+0

“我想比较se([i])> 0,然后重新分配se([i])的值为0”是什么意思? –

+1

更重要的是:你是什么意思“我想比较se([i])> 0”?没有'se([i])'这样的东西; 'set's不可调用,也不可转位,所以我无法猜测你在这里做什么。同样也适用于“重新分配”部分。你想比较什么> 0,你想分配给0什么,在什么情况下,你想分配它? – abarnert

回答

1

如果你只是想的se每个元素比较0,并替换为> 00的那些,那是相当容易:

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])