【问题标题】:Python 3.x : using a list, if a letter isn't in that list, add it. otherwise, increment the value by 1Python 3.x :使用列表,如果该列表中没有字母,则添加它。否则,将值增加 1
【发布时间】:2016-10-18 23:49:43
【问题描述】:

这就是我正在做的事情:我正在提取一个文件并让程序读取它。每次遇到一个字母,它就会将该字母添加到list1,并将'1'添加到list2。每次在 list1 中遇到一个字母,它都会将 list2 加 1。

txt = open("Nameoffile.txt")
wordcount = 0
Charcount = 0
letterlist = [] #list 1
lettercount = [] #list 2

for words in txt:
    print(words)
    for letters in words:
        if letters not in letterlist:
           letterlist.append(letters)
           lettercount[letters] = 1
        else:
           lettercount[letters] += 1

        Charcount += 1
        print(letters)
        if letters == ' ':
           wordcount += 1
        if letters == '.':
           wordcount += 1
        if letters == '\n':
           Charcount -= 1
           wordcount += 1

#down here it would print the results

我遇到的问题是,在运行此程序时,我收到以下错误: 第 14 行,字母计数 [字母] = 1 TypeError: 列表索引必须是整数或切片,而不是 str

我以为我可以在 list[letter] 处将该值设置为一个数字,但它不喜欢它。有什么可能的提示吗?

【问题讨论】:

  • 您在寻找lettercount[lettercount.index(letters)]吗?
  • 该错误告诉我它正在提出一个 str 并且它不会添加该整数值。添加“.index”最终会解决问题吗?
  • 错误告诉你,访问列表时,索引必须是整数,比如list_here[1],而不是list_here["string"]。如果您想获取字符串出现的索引,请使用index,但这可能不是您想要的。也许是一个存储计数的字典?
  • 在 else 之后更改 lettercount[letters] += 1 后,它给了我这个错误:ValueError: 't' is not in list

标签: python list python-3.x append increment


【解决方案1】:

你的函数的那一行基本上试图做这样的事情:

lettercount['a'] += 1

这真的没有任何意义。列表是有序集合,只能通过数字索引访问,这就是为什么你会收到一个错误,告诉你需要一个整数(不是字符串)。正如提到的其他答案,您真的想将每个字母的计数存储在字典中。 Python 标准库提供了一个 Counter dict 子类,它实际上非常适合您的需求 - 它会为您计算字符并轻松删除重复项:

import collections

lettercount = collections.Counter(yourtext)

letterlist = set(lettercount)
charcount = len(list(c for c in lettercount.elements() if c != '\n'))
wordcount = lettercount[' '] + lettercount['.'] + lettercount['\n']

【讨论】:

  • 可靠的回应,我很感激诺亚!
【解决方案2】:

列表使用整数索引,您可以使用字典代替:

lettercount = {} #list 2

字典具有存储键值对象的能力,因此您可以使用非数字键来获取值。它们的使用类似于列表,因此您仍然可以使用:

lettercount[letters] = 1

要添加或更新字典中的键,但是它们不能作为列表迭代,您必须使用键或 iteritems 方法对其进行迭代。 要打印结果,您可以遍历键并显示计数:

for e in lettercount.keys():
    print (e, str(lettercount[e]))

【讨论】:

  • 感谢 Andrew 的评论,我的目的是非常简洁地说明如何解决问题,而不是对 python 中字典的使用和功能进行完整的解释。无论如何,我会在下一条评论中考虑到它。
【解决方案3】:

lettercount 应该是 dict 类型,而不是 list。 类型 dict 将唯一键映射到一个值,而 list 只包含值。 列表括号中的值应该是一个整数,引用列表中的位置,而字典将引用括号中的键。

【讨论】:

  • 需要详细说明吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2023-02-04
相关资源
最近更新 更多