python:如何用字符串列表替换字符串列表中的字符串?

时间:2012-09-29 14:07:08

标签: python list

好的,这是一个例子:

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

我做了data.replace(replaceText,replaceData),但它没有用。如何用字符串列表替换字符串列表中的字符串?任何帮助将不胜感激。

编辑: 确切的条件是替换或拆分包含" s"所以我在其中放了一个循环。因此最终结果将打印出来     data = [' Thi',' i',' a',' te'''',&# 39;',''' li'' t']

3 个答案:

答案 0 :(得分:3)

在列表中,使用.index()查找文本的位置,然后使用切片分配替换:

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

这将一次只替换一次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

答案 1 :(得分:2)

您可以使用列表的index()方法查找p的{​​{1}}位置:

replaceText

然后使用构造

p = data.index(replaceText)

使用data[start:end] = another_list

将p中的元素替换为p + 1(不包括结尾)
replaceData

请注意,如果data[p:p+1] = replaceData 中不存在index(),则ValueError会引发replaceText

data

答案 2 :(得分: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']