2017-04-03 59 views
0

下面的代碼用計數器打印出所有字符[d,e]但我只需要第一個字符打印出來,我該怎麼做?在Python中打印第一個不重複字符的字符串

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

替換'和'return' print' ...你的代碼仍然是越野車th –

+0

string.count在一個循環中,break count == 1.當我使用我的手機時,會給出更完整的答案tommorow。但看看這個建議。 – PythonTester

回答

0

使用break當你找到你要找停止for循環的字符。

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

使用這樣的選擇:

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

'collections.Counter'不保存順序。這可能是一個缺點。 – zondo

+0

@zondo,是的,只是檢查了一下。感謝您的注意,更新問題。 –

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

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') 
相關問題