0

これが私のコードです。空のセットを定義し、 を比較して se([i]) > 0、 の値を に再割り当てse([i])します0se([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

の各要素を比較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複数回追加することは、1回追加することとまったく同じです。それで:

>>> 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 に答える