我正在尝试在字符串中找到第一个重复的字符,并使用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
答案 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"))