【问题标题】:Capitalize a character Before and After Nth character in a string in a Python list将 Python 列表中字符串中第 N 个字符之前和之后的字符大写
【发布时间】:2021-02-19 01:57:40
【问题描述】:

这是我的代码,我在列表中的特定字母之前和之后尝试大写字母。大写前后的任何字母 大写首府城市中每个“z”前后的前后字母。所有其他字母均为小写。包含该字母的所有城市都将存储在列表中并返回。如果我能得到一些输入,那就太好了。另外,如果我需要完全更改代码,请告诉我其他方式。我对此很陌生,任何输入都将不胜感激。谢谢

lst = ['brazzaville', 'zagreb', 'vaduz']

lst2 = []
for wrd in lst:
    newwrd = ''
    for ltr in wrd:
        if ltr in 'ua':
            newwrd += ltr.capitalize()
        else:
            newwrd += ltr

    lst2.append(newwrd)
print(lst2)

我不断收到这个:

['brAzzAville', 'zAgreb', 'vAdUz']

但我需要这个:

['brAzzAville', 'zAgreb', 'vadUz']

【问题讨论】:

    标签: python-3.x list keyword enumerate countries


    【解决方案1】:

    以下策略包括遍历单词并将 z 的 index-1 和 index+1 处的字母(如果存在)替换为大写字母:

    lst2 = []
    for wrd in lst:
        wrd = wrd.lower()
        for idx, letter in enumerate(wrd):
            if letter == 'z':
                if idx-1 > 0 and wrd[idx - 1] != 'z':
                    wrd = wrd.replace(wrd[idx - 1], wrd[idx - 1].upper())
                if idx+1 < len(wrd) and wrd[idx + 1] != 'z':
                    wrd = wrd.replace(wrd[idx + 1], wrd[idx + 1].upper())
        if "z" in wrd:
            lst2.append(wrd)
    
    print(lst2)
    #['brAzzAville', 'zAgreb', 'vadUz']
    

    【讨论】:

    • 非常感谢。如果它们是这样的大写字母怎么办? lst = ['布拉柴维尔','萨格勒布','瓦杜兹']
    • @Riel 然后你只需在代码中插入一行:wrd = wrd.lower() 在内循环和外循环之间。查看我更新的代码。
    【解决方案2】:

    我认为这段代码给出了正确的答案,验证一次

    def findOccurrences(s, ch):
        return [i for i, letter in enumerate(s) if letter == ch]
    
    
    lst = ['brazzaville', 'zagreb', 'vaduz']
    
    lst2 = []
    result = []
    for wrd in lst:
        newwrd = ''
        result = findOccurrences(wrd, 'z')
        for i in range(len(wrd)):
            if (i + 1 in result or i - 1 in result) and wrd[i] != 'z':
                newwrd += wrd[i].capitalize()
            else:
                newwrd += wrd[i]
    
        lst2.append(newwrd)
    print(lst2)
    

    【讨论】:

      【解决方案3】:

      将字符串中的第 N 个字符大写

      res = lambda test_str,N: test_str[:N] + test_str[N].upper() + test_str[N + 1:] if test_str else ''
      

      伪代码

      1. 遍历列表并过滤列表中包含“z”的字符串。
      [check(i) for i in lst if 'z' in i]
      
      • 对于列表中的每一项:
      1. 找到索引并将前面的字符大写到第一次出现的 'z' 没有旋转。
      preind = list(i).index('z')-1 if list(i).index('z')-1>0 else None
      k =  res(stri,preind) if(preind) else i
      
      1. 找到索引并将后续字符大写到最后出现的“z”,不进行旋转。
      postind = i.rfind('z')+1 if i.rfind('z')+1<len(i) else None
      stri =  res(i,preind) if(preind) else stri
      

      代码

      lst = ['brazzaville', 'zagreb', 'vaduz']
      
      def check(i):
          stri = ""
          k = ""
          i = i.lower()
          
          # lambda expression to capitalise Nth character in a string 
          res = lambda test_str,N: test_str[:N] + test_str[N].upper() + test_str[N + 1:] if test_str else ''
          
          # find index of the preceeding character to 'z'
          preind = list(i).index('z')-1 if list(i).index('z')-1>0 else None
          
          # find index of the succeeding character to 'z'
          postind = i.rfind('z')+1 if i.rfind('z')+1<len(i) else None
          
          # capitalise preceeding character to 'z'
          stri =  res(i,preind) if(preind) else i
          # capitalise succeeding character to 'z'
          k = res(stri,postind) if(postind) else stri
      
          # return the processed string 
          return k
          
          
      
      print([check(i) for i in lst if 'z' in i ])
      #output
      ['brAzzAville', 'zAgreb', 'vadUz']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-06
        • 2022-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        相关资源
        最近更新 更多