0

Python リストの要素を変更しようとしていますが、うまくいきません。

content2 = [-0.112272999846, -0.0172778364044, 0, 
            0.0987861891257, 0.143225416783, 0.0616318333661,
            0.99985834, 0.362754457762, 0.103690909138,
            0.0767353098528, 0.0605534405723, 0.0, 
            -0.105599793882, -0.0193182826135, 0.040838960163,]

 for i in range((content2)-1):
        if content2[i] == 0.0:
            content2[i] = None

print content2

以下を生成する必要があります。

   content2 = [-0.112272999846, -0.0172778364044, None,
               0.0987861891257, 0.143225416783, 0.0616318333661,
               0.99985834, 0.362754457762, 0.103690909138,
               0.0767353098528, 0.0605534405723, None,
               -0.105599793882, -0.0193182826135, 0.040838960163,]

他にも色々な方法を試しました。誰でもアイデアを得ましたか?

4

3 に答える 3

6

Python でインデックスによる変更を避ける必要があります

>>> content2 = [-0.112272999846, -0.0172778364044, 0, 0.0987861891257,
 0.143225416783,     0.0616318333661, 0.99985834, 0.362754457762, 0.103690909138,
 0.0767353098528, 0.0605534405723, 0.0, -0.105599793882, -0.0193182826135, 
0.040838960163]
>>> [float(x) if x else None for x in content2]
[-0.112272999846, -0.0172778364044, None, 0.0987861891257, 0.143225416783, 0.0616318333661, 0.99985834, 0.362754457762, 0.103690909138, 0.0767353098528, 0.0605534405723, None, -0.105599793882, -0.0193182826135, 0.040838960163]

このcontent2リスト内包表記の結果に変更するには、次のようにします。

content2[:] = [float(x) if x else None for x in content2]

あなたのコードは次の理由で機能しませんでした:

range((content2)-1)

1から減算しようとしていlistます。また、rangeエンドポイントは排他的です(それは- 1、あなたが再び減算1しているエンドポイントまで上がります)ので、あなたが意味したのはrange(len(content2))

コードのこの変更は機能します:

for i in range(len(content2)):
    if content2[i] == 0.0:
        content2[i] = None

intPython の s が false に評価されるという暗黙の事実を使用する方が0適切なので、これも同様にうまく機能します。

for i in range(len(content2)):
    if not content2[i]:
        content2[i] = None

PEP-8if len(x) == 0で推奨されているようにチェックする代わりに、リストとタプルに対してもそれを行うことに慣れることができます

私が提案したリスト内包表記:

content2[:] = [float(x) if x else None for x in content2]

意味的に同等です

res = []
for x in content2:
    if x: # x is not empty (0.0)
        res.append(float(x))
    else:
        res.append(None)
content2[:] = res # replaces items in content2 with those from res
于 2013-06-10T14:15:00.387 に答える