我想得到每個字母和它們的索引。但我得到了錯誤的答案。
def counting(sentence):
for letter in sentence:
if not letter == ' ':
print(letter ,":", [sentence.index(letter)],end =" ")
print(counting("Hello my friends"))
H : [0] e : [1] l : [2] l : [2] o : [4] m : [6] y : [7] f : [9] r : [10] i : [11] e : [1] n : [13] d : [14] s : [15]
我得到了這個作為答案。問題是我得到了雙 e 但索引相同。這個想法是得到例如 e:[1,19,24 等]。我應該改變什么?有可能用字典制作嗎?
uj5u.com熱心網友回復:
您可以使用enumerate回圈遍歷字串并同時提供元素和索引號。
這也使用 adefaultdict來擁有一個包含串列作為值的字典,如果鍵不存在,那么當您呼叫時它將被創建為一個空串列append。
from collections import defaultdict
sentence = "Hello my friends"
indexes = defaultdict(list)
for index, letter in enumerate(sentence):
if letter != ' ':
indexes[letter].append(index)
for letter in sorted(indexes):
print(f"{letter}: {indexes[letter]}")
這給出:
H: [0]
d: [14]
e: [1, 12]
f: [9]
i: [11]
l: [2, 3]
m: [6]
n: [13]
o: [4]
r: [10]
s: [15]
y: [7]
更新:回應下面的評論說輸出索引不應該在空格上增加:這不是我對問題的解釋,但如果這是有意的,可以通過預處理輸入來處理:
sentence = sentence.replace(" ", "")
(然后if條件變得不必要并且可以洗掉)。
uj5u.com熱心網友回復:
您可以將匹配位置存盤在串列中,然后將該串列存盤在字典中,而不是在線搜索字母索引。
def counting(sentence):
output_dict = {}
for i,l in enumerate(sentence):
if l in output_dict.keys():
output_dict[l].append(i)
else:
output_dict[l] = [i]
return output_dict
for k,v in counting("Hello my friends"):
print(f'{k}:{v}', end=" ")
uj5u.com熱心網友回復:
或者你可以這樣做:
def counting(sentence):
res = {key: [] for key in set(sentence)}
for i in range(len(sentence)):
if not sentence[i] == ' ':
res[sentence[i]].append(i)
return res
print(counting("Hello my friends"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348102.html
