1

for ループ内で要素が更新されないのはなぜですか? これは私を取得します

met_dir = r'D:\09052012\run\fout'
out_dir = r'D:\inpassingstest\test_cmd'

for c_dir in [met_dir,out_dir]:
    if c_dir[-1:] != '\\':
       c_dir += '\\'
       print c_dir
print met_dir

>>>D:\09052012\run\fout\
>>>D:\inpassingstest\test_cmd\
>>>D:\09052012\run\fout

インデックスを使用して要素をアドレス指定する場合も同じことが起こります。

4

3 に答える 3

4

文字列は不変オブジェクトです。つまり、変更することはできず、代わりに新しい文字列を作成します。つまり、文字列に追加しても、元の文字列は変更されません。これに対する簡単な解決策は、新しい文字列の新しいリストを作成するリスト内包表記です。

>>> [c_dir + "\\" if not c_dir.endswith("\\") else c_dir for c_dir in (met_dir, out_dir)]
['D:\\09052012\\run\\fout\\', 'D:\\inpassingstest\\test_cmd\\']

値に簡単に展開できるのはどれですか。

met_dir, out_dir = [...]

str.endswith()私の使用は、チェックを行うための良い方法であることに注意してください。

于 2012-10-25T12:29:27.693 に答える
2

文字列は Python では不変です。c_dir += '\\'追加された新しい文字列を作成しますが\\、元の文字列を置き換えません。

于 2012-10-25T12:28:12.000 に答える
2

stringsPython では不変なので、そのような内容を変更することはできません。何が起こるかというと、次の行です。

c_dir += '\\'

ローカル変数c_dirは新しい文字列に置き換えられます (\\追加されます)。ループの繰り返しを終了すると、この新しい文字列は失われます。

于 2012-10-25T12:28:55.447 に答える