【问题标题】:Print first non repetitive character of string in Python在Python中打印字符串的第一个非重复字符
【发布时间】:2017-04-03 23:12:31
【问题描述】:

下面的代码用计数器打印出所有字符 [d, e] 但我只需要打印出第一个字符,我该怎么做?

def firstNonRepeat(s):
  counter = {}

  for char in s:
    if char in counter:
      counter[char] += 1
    else:
      counter[char] =  1

  for char in s:
    if counter[char] == 1:
      print char
  return None

firstNonRepeat('aabccbdcbe')

【问题讨论】:

  • print 替换为return...您的代码仍然有问题
  • string.count 在一个循环中,当 count == 1 时中断。明天会在我使用手机时给出更完整的答案。但是看看那个建议。

标签: python string python-2.7


【解决方案1】:

试试这个:从字符串中删除那个实例(字符),并查看该字符是否存在于其余部分中:

def firstNonRepeat(s):

  for i, char in enumerate(s):
    # print i, char, s[i+1:]
    if char not in s[:i]+s[i+1:]:
      print char
      return

firstNonRepeat('aabccbdcbe')

【讨论】:

    【解决方案2】:

    使用这样的选项:

    def firstNonRepeat(s):
        counter = {}
        for char in s:
            if char in counter:
                counter[char] += 1
            else:
                counter[char] =  1
        for item in counter:
            if counter[item] == 1:
                return item
    print(firstNonRepeat('aabccbdcbe'))
    

    想法是在 for 循环中返回第一个匹配项,并通过返回匹配项来停止循环。另外,如果for循环没有找到任何东西,它会返回None,不需要写最后一个return。

    【讨论】:

    • collections.Counter 不保留顺序。这可能是一个缺点。
    • @zondo,是的,刚刚检查过。感谢您的关注,更新问题。
    【解决方案3】:

    找到要查找的字符时使用break 来停止 for 循环。

    for char in s:
        if counter[char] == 1:
          print char
          break
    

    【讨论】:

      【解决方案4】:

      好的,首先,我可能误解了您要查找的内容,但如果您正在寻找一个不会立即重复 ('aa') 的角色,那么这应该适合您。

      您正在遍历整个数组的一个和一部分。我是这样做的:

      def first_non_repeat(s):
              if len(s) == 1:
                      return s
              for i in range(len(s)):
                      if (i == 0 and s[i+1] != s[i]) or (i<len(s)-1 and s[i-1] != s[i] and s[i] != s[i+1]) or (i == len(s)-1 and s[i-1] != s[i]):
                              return s[i] # or return i
              return None
      

      它在数组上循环,但只在需要的时候循环,以获取第一个不重复的字母。 if 语句检查当前索引前后的字符是否与当前索引处的字符不匹配,如果是,则返回该字母。请注意,您也可以让它返回可能更有用的索引。

      如果你输入

      "HHHHELLLO WORLD!"
      

      函数的输出是'E',或者如果您将其更改为返回索引值,它将返回4

      【讨论】:

        【解决方案5】:

        @佐罗: 您的解决方案几乎是正确的。只需对您的代码稍作更改,您就可以开始了。您必须编写 return 语句,因为它会找到一个计数为 1 的字符。 我在下面为您编写解决方案:

            def firstNonRepeat(s):
                counter = {}
        
                for char in s:
                    if char in counter:
                        counter[char] += 1
                    else:
                        counter[char] =  1
        
                for char in s:
                    if counter[char] == 1:
                        print (char)
                        return
        
            firstNonRepeat('aabccbdcbe')
        

        【讨论】:

          【解决方案6】:
          def firstNonRepeat(s):
              counter = {}
              result = []
          
          
              for char in s:
                  if char in counter:
                      counter[char] += 1
                  else:
                      counter[char] =  1
                      result.append(char)
          
              for i in result:
                  if counter[i] == 1:
                      return(i)
          

          【讨论】:

            【解决方案7】:

            def findFirstUniqueChar(s): d = {} 对于 s 中的 c: 如果 c 在 d 中: d[c] += 1 别的: d[c] = 1

            for c in s:
                if d[c] == 1:
                    return s.index(c)
            return -1
            

            【讨论】:

              猜你喜欢
              • 2019-02-19
              • 1970-01-01
              • 2021-10-15
              • 2013-09-25
              • 1970-01-01
              • 1970-01-01
              • 2012-10-04
              • 1970-01-01
              相关资源
              最近更新 更多