![](/img/trans.png)
[英]How to count similar domains in emails and print every domain only once[python]?
[英]Python - How to count characters, but only print once?
我試圖弄清楚我的代碼。 該代碼的目的是創建一個字符頻率計數器。 字符頻率計數器必須按字母順序顯示結果。 因此,代碼必須輸入並顯示如下所示的字符數:
輸入=(“蘋果”)'a'= 1
'e'= 1
'l'= 1
'p'= 2
目前,我的代碼執行此操作:
'a'= 1
'e'= 1
'l'= 1
'p'= 2
'p'= 2
有解決這個問題的想法嗎? 理想情況下,我只希望將“ p”顯示一次,但同時計算兩個字符。
這是我的代碼:
char_dict = {}
user_input = input("Please enter a word or sentence: ")
user_input = user_input.replace(" ", "")
user_input = user_input.lower()
test_list = list(user_input)
test_list.sort()
for character in user_input:
char_dict[character] = 0
for character in user_input:
char_dict[character] = char_dict[character] + 1
for character in test_list:
print (character, ":", char_dict[character])
任何幫助將不勝感激。 非常感謝!
您擁有正確的零件,但問題實際上要比制造過程簡單:
user_input = input("Please enter a word or sentence: ")
user_input = user_input.replace(" ", "")
user_input = user_input.lower()
char_dict = {}
for character in user_input:
char_dict[character] = char_dict.get(character, 0) + 1
for character in sorted(char_dict):
print(character, ":", char_dict[character])
輸出值
> python3 test.py
Please enter a word or sentence: apple
a : 1
e : 1
l : 1
p : 2
>
您也可以嘗試以下方法:
string = "apple" #Input string
string = string.replace(" ","").lower() #In case of whitespace
setString = sorted(map(lambda i : [i,string.count(i)], set(string)))
for i in setString:
print("%s : %d" % (i[0],i[1]))
輸出:
a : 1
e : 1
l : 1
p : 2
這就是我使用collections.Counter
和新的f字符串編寫程序的方式:
from collections import Counter
word = input("What is your word? ")
letter_counts = Counter(word.lower())
sorted_letter_counts = sorted(letter_counts.items())
for letter, count in sorted_letter_counts:
print(f"'{letter}' = {count}")
也許您可以創建一些“已用符號”的列表,然后在計算任何符號后,只需將其添加到列表中即可。
usedsymb=[]
for character in user_input:
if usedsymb.count(character)==0:
char_dict[character] +=1 (this will add 1)
usedsymb.append(character)
您會兩次獲得“ p”,因為您要遍歷其中有“ p”的單詞“ apple”。 嘗試遍歷字典中鍵的排序列表,因為每個字符將只有一個唯一的鍵。
因此,將第二行更改為最后一行,並刪除幾行不再需要的行:
char_dict = {}
user_input = input("Please enter a word or sentence: ")
user_input = user_input.replace(" ", "")
user_input = user_input.lower()
for character in user_input:
char_dict[character] = 0
for character in user_input:
char_dict[character] = char_dict[character] + 1
for character in sorted(char_dict.keys()):
print (character, ":", char_dict[character])
我能想到的一個更好的解決方案是在Python中使用collections包。 這是一種設計模式。 收集包中有一個Counter方法,該方法可以解決您的問題。
它非常簡單易用。
以下是該代碼塊。
input_string = "apple" from collections import Counter result = Counter([i for i in input_string]) print (result)
這應該為您做魔術。 使用設計模式通常會更好,因為它們會簡化工作。
使用計數器,只需幾行代碼即可獲得所需的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.