替换。如果以('特定字符串')开始,然后返回一个列表,可怕的标题

2024-10-03 04:26:21 发布

您现在位置:Python中文网/ 问答频道 /正文

example = ['1 Hey this is the first (1) level.\n', '2 This is what we call a second level.\n','','3 This is the third (3) level, deal with it.']
example = [i.rstrip() for i in example]

dictHeaders =   [['1 ','One'],
                ['2 ','Two'],
                ['3 ','Three'],
                ['4 ','Four'],
                ['5 ','Five'],
                ['6 ','Six']]

example = [eachLine.replace(old,new,1) if eachLine.startswith(old) for eachLine in article for old, newFront in dictHeaders]

我需要它回来。。。在

^{pr2}$

我创建了dictHeaders作为一个列表列表,目的是为每个实例的每个键添加move值。例如,如果eachLine.startswith(old),则在行首附加{},并可能在行尾附加另一个字符串。如果我能用口述完成上述任务,我宁愿走那条路。。我是Python新手。在

我想这是一条代替。。。在

def changeCode(example,dictHeaders):
    for old, newFront in dictHeaders:
        for eachLine in example:
            if eachLine.startswith(old):
            return eachLine.replace(old,newFront,1)

每次我运行上面的代码时,它只返回第一行,但我需要它返回整个列表example修改过的。。在


Tags: thein列表forifisexamplethis
2条回答

最好的方法是使用regex并智能地替换数字:

import re

examples = [
  '1 Hey this is the first (1) level.\n',
  '2 This is what we call a second level.\n',
  '3 This is the third (3) level, deal with it.',
  '56 This is the third (3) level, deal with it.'
]

class NumberReplacer(object):
  def __init__(self):
    self.ones = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    self.teens = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
    self.tens = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']

  def convert(self, number):
    if number == 0:
      return 'zero'
    elif number < 10:
      return self.ones[number - 1]
    elif number <= 19:
      return self.teens[number % 10]
    else:
      tens = self.tens[number // 10 - 2]
      ones = number % 10 - 1

      if ones == -1:
        return tens
      else:
        return ' '.join([tens, self.ones[ones]])

  def __call__(self, match):
    number = int(match.group(0))

    return self.convert(number).title()

replacer_regex = re.compile('^\s*(\d+)')
replacer = NumberReplacer()

for example in examples:
  print replacer_regex.sub(replacer, example)

你很接近。你不应该从for循环内部返回。相反,您可以创建一个list作为返回值,并将每个结果附加到它

def changeCode(example,dictHeaders):
    retval = []
    for eachLine in example:
        for old, newFront in dictHeaders:
            if eachLine.startswith(old):
                retval.append(eachLine.replace(old,newFront,1))
                break
        else:
            retval.append(eachLine)
    return retval

相关问题 更多 >