输出给定字符串中第一个重复字符的代码?

时间:2018-06-21 19:51:10

标签: python

我正在尝试在字符串中找到第一个重复的字符,并使用python输出该字符。检查代码时,我看到我没有索引代码的最后一个字符。

我在做什么错?

letters = 'acbdc'
for a in range (0,len(letters)-1):
#print(letters[a])
    for b in range(0, len(letters)-1):
        #print(letters[b])
        if (letters[a]==letters[b]) and (a!=b):
            print(b)
            b=b+1
a=a+1

9 个答案:

答案 0 :(得分:3)

您可以通过一种更简单的方式做到这一点:

letters = 'acbdc'
found_dict = {}
for i in letters:
    if i in found_dict:
        print(i)
        break
    else:
        found_dict[i]= 1

输出: c

答案 1 :(得分:3)

这是带有集合的解决方案,它应该比使用字典更快。

letters = 'acbdc'
seen = set()

for letter in letters:
    if letter in seen:
        print(letter)
        break
    else:
        seen.add(letter)

答案 2 :(得分:2)

这是一个解决方案,一旦找到dup,它将立即停止迭代

>>> from itertools import dropwhile
>>> s=set(); next(dropwhile(lambda c: not (c in s or s.add(c)), letters))
'c'

答案 3 :(得分:1)

您应该使用range(0, len(letters))而不是range(0, len(letters) - 1),因为range已经停止计数,比指定的停止值小一。在这种情况下,从停止值中减去1只会使您跳过letters的最后一个字符。

请阅读以下范围的文档: https://docs.python.org/3/library/stdtypes.html#range

答案 4 :(得分:1)

漂亮的单缸发电机:

l = 'acbdc'
next(e for e in l if l.count(e)>1)

或遵循注释中的规则以适合“ abba”情况:

l = 'acbdc'
next(e for c,e in enumerate(l) if l[:c+1].count(e)>1)

答案 5 :(得分:1)

您的代码存在一些问题...

1。从-1删除len(letters)

2。向后移一个缩进并执行b = b + 1,即使您不使用if语句

3。在第一个for循环中缩进并执行a = a + 1

请参见下文,了解如何修改代码...

    letters = 'acbdc'
    for a in range(0, len(letters)):
        # print(letters[a])
        for b in range(0, len(letters)):
            # print(letters[b])
            if (letters[a] == letters[b]) and (a != b):
                print(b)
            b = b + 1
        a = a + 1

答案 6 :(得分:1)

下面的代码在字符串中打印第一个重复的字符。我使用列表的功能来解决此问题。

      def findChar(inputString): 
          list = []
          for c in inputString:
              if c in list:
                  return c
              else:
                  list.append(c) 
      return 'None'    

      print (findChar('gotgogle'))

工作正常。结果为“ g”。

答案 7 :(得分:0)

如果不是复杂性的问题,那么它将很好地工作。

letters = 'acbdc'
found = False
for i in range(0, len(letters)-1):
    for j in range(i+1, len(letters)):
        if (letters[i] == letters[j]):
            print (letters[j])
            found = True
            break
    if (found):
        break

答案 8 :(得分:0)

def first_repeated_char(str1):
    for index,c in enumerate(str1):
       if str1[:index+1].count(c) > 1:
       return c 
    return "None"

print(first_repeated_char("abcdabcd"))