2013-01-17 45 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])