繁体   English   中英

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

[英]Code to output the first repeated character in given string?

我试图在我的字符串中找到第一个重复的字符并使用 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

您可以以更简单的方式执行此操作:

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

输出: c

这是一个带有集合的解决方案,它应该比使用 dicts 稍快。

letters = 'acbdc'
seen = set()

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

这是一个解决方案,它会在找到 dup 后立即停止迭代

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

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

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

漂亮的单线发电机:

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)

你的代码有一些问题......

1.从len(letters)中删除-1

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

如果复杂性不是问题,那么这将正常工作。

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

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

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

      print (findChar('gotgogle'))

工作也很好。 它给出的结果为'g'。

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"))
str_24 = input("Enter the string:")
for i in range(0,len(str_24)):
    first_repeated_count = str_24.count(str_24[i])
    if(first_repeated_count > 1):
       break
print("First repeated char is:{} and character is 
      {}".format(first_repeated_count,str_24[i]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM