1

ここに例があります:

data = ['This', 'is', 'a', 'test', 'of', 'the', 'list']
replaceText = 'test'
replaceData =['new', 'test']

私は data.replace(replaceText, replaceData) を実行しましたが、機能しません。文字列のリスト内の文字列を文字列のリストに置き換える方法は? どんな助けでも大歓迎です。

編集:正確な条件は、「s」を含む単語を置き換えるか分割することなので、ループを入れます。したがって、最終結果は data = ['Thi', 'i', 'a', 'te','t', 'of', 'the', 'li','t'] を出力します。

4

3 に答える 3

3

リストで、テキストの位置を で見つけてから、.index()スライス割り当てを使用して置き換えます。

pos = data.index(replaceText)
data[pos:pos+1] = replaceData

これにより、一度に の出現が1 つだけ置き換えられreplaceTextます。デモ:

>>> data = ['This', 'is', 'a', 'test', 'of', 'the', 'list']
>>> replaceText = 'test'
>>> replaceData =['new', 'test']
>>> pos = data.index(replaceText)
>>> data[pos:pos+1] = replaceData

すべての出現箇所を置き換えるには、posプラスの長さを使用replaceDataして、前の一致を過ぎた検索をスキップします。

pos = 0
while True:
    try:
        pos = data.index(replaceText, pos)
    except ValueError:
        break
    data[pos:pos+1] = replaceData
    pos += len(replaceData)

変更中にループオーバーする必要がある場合はdata、代わりにコピーを使用してください。

for n in data[:]:
    # maniplate data
于 2012-09-29T14:09:31.550 に答える
2

リストのindex()メソッドを使用して、次の位置を見つけるpことができreplaceTextます。

p = data.index(replaceText)

次に、コンストラクトを使用します

data[start:end] = another_list

p から p+1 までの要素 (最後は含まない) をreplaceData次のように置き換えます。

data[p:p+1] = replaceData

に存在しない場合はindex()スローされることに注意してください。ValueErrorreplaceTextdata

try:
  p = data.index(replaceText)
  data[p:p+1] = replaceData
except ValueError:
  # replaceText is not present in data, handle appropriately.
于 2012-09-29T14:13:10.760 に答える
1

ええ、実際の条件では、文字「s」を含む文字列を置換または分割する必要があります。たとえば、「test」は「te」と「t」に置き換えられてリストに表示されます

from itertools import chain
data = ['This', 'is', 'a', 'test', 'of', 'the', 'list']
>>> filter(None, chain.from_iterable(el.split('s') for el in data))
['Thi', 'i', 'a', 'te', 't', 'of', 'the', 'li', 't']
于 2012-09-29T14:45:09.660 に答える