簡體   English   中英

比較兩個字符串並創建一個包含字母和字符串中字母計數的列表

[英]Comparing two strings and creating a list containing the letter and the count of that letter in the string

我正在嘗試創建一個將2個字符串(myString和charString)作為輸入的函數,並查看charString中的字母在myString中有多少次。 然后將這些值附加到列表中。 例如(“西邊一切都安靜”,“ tqe”)應返回[“ t = 4”,“ q = 1”,“ e = 4”]。 這是我所擁有的:

def myProblem(myString, charString):
    myString = str(myString)
    charString = str(charString)
    count = 0
    newList = []
    for letter in charString:
        if letter in myString:
            count += 1
            newList.append(str(letter)+"="+str(count))
        else:
            pass
    return newList

您絕對應該使用str.count ,也不會以正確的方式附加列表。 由於您需要總數,因此將其附加在每次迭代中會適得其反。

這是正確的版本:

def myProblem(myString, charString):
    myString = str(myString)
    charString = str(charString)
    newList = []
    for letter in charString:
        newList.append(letter +"="+str(myString.count(letter)))
    return newList

print(myProblem('all is quiet on the western front', 'tqe'))

產量

['t=4', 'q=1', 'e=4']

請注意,如果轉換兩個參數對您而言都不重要,則可以在一行中完成此操作:

def myProblem(myString, charString):
    return [letter +"="+str(myString.count(letter)) for letter in charString ]

這有效嗎?

from collections import Counter
def myProblem(myString, charString):
    myString = str(myString)
    charString = str(charString)
    newList = []
    for letter in myString:
        if letter in charString:
            newList.append(str(letter))
        else:
            pass
    newList = dict(Counter(list(newList)))
    return newList

a = input("enter the phrase: ")
b = input("enter the letters to look for: ")

print(myProblem(a, b))

它只是將輸入a分成一個列表,僅保留b中的字母,然后使用計數器來計算它們出現的頻率

其中a =西部戰​​線安靜,b = qte

輸出為:{'q':1,'e':4,'t':4}

根據@ Xander25的建議,您可以使用collections.Counter

from collections import Counter
input_string = "all is quiet on the western front"
char_string = "tqe"
letter_counts = Counter(input_string) # Create a counter object
# output - Counter({' ': 6, 'a': 1, 'e': 4, 'f': 1, 'h': 1, 'i': 2, 'l': 2, 'n': 3, 'o': 2, 'q': 1, 'r': 2, 's': 2, 't': 4, 'u': 1, 'w': 1})
output_counts = {letter: letter_counts[letter] for letter in char_string} # Create dictionary containing counts of letters present in char_string
# output_counts - {'e': 4, 'q': 1, 't': 4}
output_list = [letter + "=" + str(letter_counts[letter]) for letter in char_string]
# output_list - ['t=4', 'q=1', 'e=4']

同樣,當您使用collections.Counter時,它不會為字典中不存在的任何鍵引發key error ,而是給出值0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM