【问题标题】:How to get for every letter of sentence an index of letter?如何为每个句子的字母获取字母索引?
【发布时间】:2021-12-17 22:50:19
【问题描述】:

我想获取每个字母及其索引。但我得到了错误的答案。

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] 

我得到了这个答案。问题是我得到了 double e 但具有相同的索引。我们的想法是获取例如 e:[1,19,24 等]。我应该改变什么?有没有可能用字典来制作?

【问题讨论】:

    标签: python dictionary for-loop indexing


    【解决方案1】:

    您可以使用enumerate 循环遍历字符串并给出元素和索引号。

    这也使用了defaultdict,以便有一个包含列表作为值的字典,如果键不存在,那么当您调用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 条件变得不必要并且可以删除)。

    【讨论】:

    • 使用enumerate 会给出错误的输出,因为它仍然会在空格上增加。
    • @BTables 是的,我认为它打算这样做。您仍然需要原始字符串中的索引号(因此在有空格的地方不存在某些索引号) - 问题是关于修复重复问题。但是要根据您的解释来回答问题,您只需从 sentence = sentence.replace(" ", "") 开始,然后在不需要 if 条件的情况下继续。
    • @BTables 我添加了一个更新来解决你的观点——基本上就是我在上面评论中所说的——同时也注意到我没有以这种方式解释这个问题。
    • 这很公平。重新阅读这个问题似乎比我想象的要开放一些。
    【解决方案2】:

    您可以将匹配的位置存储在列表中,然后将该列表存储在字典中,而不是在线搜索字母索引。

    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="    ")
    

    【讨论】:

    • 您的解释给出了我不想要的值。我想得到 a:[2,7] 而不是 a : [2], a :[7]
    • 我得到了相同的输出。也许我做错了什么。
    • @Learningmachine 抱歉,我误读了您的问题。现在看看编辑。
    【解决方案3】:

    或者你可以这样做:

    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"))
    

    【讨论】:

      猜你喜欢
      • 2015-01-25
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 2019-01-01
      • 2014-05-13
      • 2021-03-07
      相关资源
      最近更新 更多