在Python中打印字符串的第一个非重复字符

时间:2017-04-03 23:12:32

标签: python string python-2.7

下面的代码用计数器打印出所有字符[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')

7 个答案:

答案 0 :(得分:1)

使用这样的选项:

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,不需要写最后一次返回。

答案 1 :(得分:0)

当您找到要停止for循环的字符时,请使用break

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

答案 2 :(得分:0)

好的,首先,我可能误解了你在寻找的东西,但是如果你正在寻找一个不会立即重复的角色(' 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

答案 3 :(得分:0)

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

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')

答案 4 :(得分:0)

@Zorro: 您的解决方案几乎是正确的。只需对代码稍作更改就可以了,您必须编写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')

答案 5 :(得分:0)

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)

答案 6 :(得分:0)

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

ViewBag.Markers = markers;