6

リストのリストがあります。それらから先頭と末尾のスペースを削除したい。このstrip()メソッドは、前後のスペースを除いた文字列のコピーを返します。そのメソッドを単独で呼び出しても、変更は行われません。この実装では、'array index out of bounds error'. リスト内のすべてのリスト(0-len(networks)-1)には「an x」があり、それらのリスト内のすべての文字列には「a y」(0-len(networks [x]))があるように思えます。 i と j は、合法的なインデックスに正確にマップし、範囲外に出ないようにする必要がありますか?

i = 0
j = 0
for x in networks:
    for y in x:
    networks[i][j] = y.strip()
        j = j + 1
     i = i + 1
4

6 に答える 6

14

j最初のリストを繰り返した後、ゼロにリセットするのを忘れています。

これが、Pythonで通常明示的な反復を使用しない理由の1つです。Pythonに反復を処理させます。

>>> networks = [["  kjhk  ", "kjhk  "], ["kjhkj   ", "   jkh"]]
>>> result = [[s.strip() for s in inner] for inner in networks]
>>> result
[['kjhk', 'kjhk'], ['kjhkj', 'jkh']]
于 2012-10-25T14:43:46.293 に答える
5

自分自身を数える必要はありませんi, j。列挙するだけで、増分しないように見えます。iこれは、ループ外であり、jほとんどのループ内にないため、エラーが発生する理由です。

for x in networks:
    for i, y in enumerate(x):
        x[i] = y.strip()

また、ネットワークにアクセスする必要はありませんが、「x」にアクセスして値を置き換えることは機能します。これは、xがすでにポイントしているためです。networks[index]

于 2012-10-25T14:44:37.820 に答える
5

これにより、新しいリストが生成されます。

>>> x = ['a', 'b ', ' c  ']
>>> map(str.strip, x)
['a', 'b', 'c']
>>> 

string編集:代わりに組み込み型 ( ) を使用する場合、インポートする必要はありませんstr

于 2012-10-25T14:42:18.933 に答える
3

したがって、次のようなものが[['a ', 'b', ' c'], [' d', 'e ']]あり、 を生成したいとします[['a', 'b',' c'], ['d', 'e']]。あなたがすることができます:

mylist = [['a ', 'b', ' c'], ['  d', 'e  ']]
mylist = [[x.strip() for x in y] for y in mylist]

リストでインデックスを使用することは通常は必要ありません。反復中にリストを変更すると、複数の悪い副作用が生じる可能性があります。

于 2012-10-25T14:51:21.647 に答える
0

再帰を使用して、よりクリーンなバージョンのクリーニング リストを実装できます。これにより、コードの複雑さを非常に低く保ちながら、リスト内に無限のリストを含めることができます。

補足: これにより、ストリップのデータ型の問題を回避するための安全チェックも行われます。これにより、リストに int や float などを含めることができます。

    def clean_list(list_item):
        if isinstance(list_item, list):
            for index in range(len(list_item)):
                if isinstance(list_item[index], list):
                    list_item[index] = clean_list(list_item[index])
                if not isinstance(list_item[index], (int, tuple, float, list)):
                    list_item[index] = list_item[index].strip()

        return list_item

次に、リストで関数を呼び出します。リストのリスト内のすべての値が消去されます。

clean_list(ネットワーク)

于 2017-07-05T15:14:36.150 に答える
0
c=[]
for i in networks:
    d=[]
    for v in i:
         d.append(v.strip())
    c.append(d)
于 2012-10-26T06:29:06.423 に答える