1

私の質問は、参照によって変数を渡す方法のわずかなバリエーションです。-しかし、以下に示す問題の簡単な解決策を見つけることができません。forループ内から外部文字列変数の値を変更するにはどうすればよいですか?

str1 = 'before'
str2 = 'before'

for i in str1,str2:
    print "%s" % (i)
    i = "after"

for i in str1,str2:
    print "%s" % (i)

以下の有益な回答に感謝しますが、彼らは私の特定の問題に実際には役立っていません。以下のコードは一般的ではありませんが、私のユースケースをよりよく反映しています。

import feedparser
d = feedparser.parse('http://feeds.feedburner.com/FrontlineAudiocastPbs?format=xml')
name = d.feed.title[:127]
description = d.feed.subtitle[:255]

strs = [name,description]
for i, s in enumerate(strs):
    try:
      strs[i] = unicode(strs[i])
    except:
      strs[i] = "Invalid unicode detected!"

for s in name,description:
  print s 

2つの元の文字列変数が更新されていないことがわかります。forループは、「description」への割り当てなど、不正な形式の文字列を検出して処理することを目的としています。したがって、「関連する」アドバイスをいただければ幸いです。

以下のリスト内包表記スライス代入アプローチの優雅さが好きで、理想的にはその手法を使用します。

4

4 に答える 4

5

文字列を個別の変数として扱うのではなく、文字列のリストを作成してから、次のコマンドで文字列をループできますenumerate

strs = ['before', 'before']
for i, s in enumerate(strs):
    print s
    strs[i] = "after"

print strs
于 2012-09-05T17:14:26.587 に答える
3

回避策の1つは、たとえば次を使用して、データを異なる方法で構造化することです。

d = {'str1': 'before', 'str2': 'before'}
for i in d:
    print d[i]
    d[i] = "after"

重要なことは、この変数が変更可能であるということです(リンクで説明されているように)。

于 2012-09-05T17:02:30.227 に答える
1
strs = ['before', 'before']
strs[:] = ['after' for s in strs]
于 2012-09-05T17:02:09.460 に答える
-1
str1 = 'before'
str2 = 'before'

import sys
currentobject = sys.modules[__name__]

for i in 'str1', 'str2':
    setattr(currentobject, i, 'after')

for i in str1,str2:
    print "%s" % (i)
于 2012-09-05T17:05:45.153 に答える