0

这是我的代码,我定义了一个空集,我想比较 se([i]) > 0,然后重新分配se([i])to的值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
4

1 回答 1

1

如果您只是想比较 to 的每个元素se,并用0替换那些,那很容易:> 00

se = {0 if element > 0 else element for element in se}

或者,如果您考虑一下:

se = {min(element, 0) for element in se}

您不能通过 indexing 来做到这一点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])
于 2013-01-18T00:03:24.687 回答