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

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

您可以使用 list 的index()方法来查找 的p位置replaceText

p = data.index(replaceText)

然后使用构造

data[start:end] = another_list

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

data[p:p+1] = replaceData

注意index()throws ValueErrorifreplaceText不存在于data

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 回答