【问题标题】:Python 3 - Check letters in string with the next letterPython 3 - 用下一个字母检查字符串中的字母
【发布时间】:2015-03-04 23:35:48
【问题描述】:

如果我有一个字符串

String = 'ABCEEFGH'

如何在不超出索引的情况下检查每个字母旁边的字母?

for index in range(len(String)):
    if String[index] == String[index+1]: 
        print('Double')

【问题讨论】:

    标签: python string python-3.x indexing


    【解决方案1】:

    您可以使用enumerateslicing 直到倒数第二个字符的字符串:

    String = 'ABCEEFGH'
    
    for ind,ch in enumerate(String[:-1]):
        if ch == String[ind+1]:
            print('Double')
    

    在您自己的代码中,逻辑将是相同的len(String)-1,但枚举是要走的路:

    for index in range(len(String)-1):
        if String[index] == String[index+1]:
            print('Double')
    

    您看到的只是想检查任何两个相邻字符是否相同,也许最好使用any

    String = 'ABCEEFGH'
    
    if any( ch == String[ind+1] for ind, ch in enumerate(String[:-1])):
            print('Double',ch)
    

    any 将短路并在条件为True 时立即中断循环,否则如果我们没有匹配项,则评估为False

    【讨论】:

    • 哇,谢谢。我之前确实尝试过使用 range(len(String)-1) 但我没有得到单词的第一个字母
    • @Torched90,不用担心,[-1] 正在索引,获取最后一个字符,[:-1] 正在切片
    【解决方案2】:
    >>> text = 'ABCEEFGH'
    >>> for c1, c2 in zip(text, text[1:]):
            if c1 == c2:
                print 'double'
    
    
    double
    

    【讨论】:

      【解决方案3】:

      如果您考虑与上一个字母而不是下一个字母进行比较,这类问题几乎总是更容易。记住你已经看过的字母比向前看要容易得多。

      text = 'ABCEEFGH'
      prev = ''
      for letter in text:
          if letter == prev:
             print("letter duplicated:", letter)
          prev = letter
      

      【讨论】:

        【解决方案4】:

        你可以使用正则表达式:

        for match in re.findall(r'([a-z])\1', your_string):
            print('Double letters found here.')
        

        【讨论】:

          猜你喜欢
          • 2019-08-05
          • 1970-01-01
          • 2011-08-16
          • 1970-01-01
          • 1970-01-01
          • 2019-12-29
          • 2020-02-06
          • 1970-01-01
          相关资源
          最近更新 更多