Python计数器是单词而不是字母

Python计数器是单词而不是字母,python,python-3.x,counter,Python,Python 3.x,Counter,我正在尝试创建一个程序,它读取文本文件并查找单个单词的数量。 我已经算出了其中的大部分,但我一直在努力让计数器像现在这样挑选单词而不是字母 import collections with open ("file.txt" ,"r") as myfile: data=myfile.read() [i.split(" ") for i in data] x=collections.Counter(data) print (x) 我的目的是在列表中加上空格,这将导致每个单词都成为列表

我正在尝试创建一个程序,它读取文本文件并查找单个单词的数量。 我已经算出了其中的大部分,但我一直在努力让计数器像现在这样挑选单词而不是字母

import collections 

with open ("file.txt" ,"r") as myfile:
    data=myfile.read()
[i.split(" ") for i in data]

x=collections.Counter(data)

print (x)
我的目的是在列表中加上空格,这将导致每个单词都成为列表中的一个对象。然而,这并没有起作用

结果:

Counter({' ': 1062, 'e': 678, 't': 544, 'o': 448, 'n': 435, 'a': 405, 'i': 401, 'r': 398,       's': 329, 'c': 268, 'm': 230, 'h': 216, 'u': 212, 'd': 190, 'l': 161, 'p': 148, 'f': 107, 'g': 75, 'y': 68, '\n': 65, ',': 61, 'b': 55, 'w': 55, 'v': 55, '.': 53, 'N': 32, 'A': 20, 'T': 19, '"': 18, ')': 17, '(': 17, 'C': 17, 'k': 16, "'": 16, 'I': 16, 'x': 15, '-': 14, 'E': 13, 'q': 12, 'V': 10, 'U': 9, ';': 7, '1': 6, 'j': 5, '4': 5, 'P': 5, 'D': 5, '9': 5, 'L': 4, 'z': 4, 'W': 4, 'O': 3, 'F': 3, '5': 3, 'J': 2, '3': 2, 'S': 2, 'R': 2, '0': 1, ':': 1, 'H': 1, '2': 1, '/': 1, 'B': 1, 'M': 1, '7': 1})

您的列表理解从未分配,因此不做任何事情

将拆分文本传递给集合。计数器():

我使用了不带参数的
str.split()
,以确保在分割时使用任意宽度的空白并包含换行符;例如,您的
计数器()
有65个不需要的换行符

在上下文中,更紧凑一点:

from collections import Counter

with open ("file.txt") as myfile:
    x = Counter(myfile.read().split())

print(x)

要回答标题,请设置一个或多个字符串的列表,而不是使用字符串更新计数器

然后,如果您的代码是:

from collections import Counter
words_count = Counter("tiger")
from collections import Counter
words_count = Counter(["tiger"])
请记住,字符串是一个字符列表。代码如下:

from collections import Counter
words_count = Counter("t", "i", "g", "e", "r")
否则,如果您的代码为:

from collections import Counter
words_count = Counter("tiger")
from collections import Counter
words_count = Counter(["tiger"])

然后,列表元素就是完整的单词。

确保使用
split()
而不是像Martijn Pieters那样使用
split(“”
),否则字符串将不会在换行符或制表符处拆分!“您的列表理解从未被赋值,因此不会做任何事情。”python 2.7中不是这种情况。@acushner:列表理解表达式可以执行副作用(这不是一个好主意),但在这种情况下,理解产生的唯一结果是一个新的列表对象。然后它被丢弃,因为它不再被使用。我知道你说的是
I
泄漏到名称空间,但这对操作几乎没有帮助,是吗。@acushner:此外,这个问题用
python-3.x
标记,因此python 2.x列表理解没有自己的作用域,在这里不适用。@MartijnPieters,是的,我读到了“什么都不做”正如字面上所说,它没有被执行,我对此感到惊讶(所以我用dis检查了它)。但后来我意识到你的意思是“它不会以你期望的方式改变数据。”谢谢这回答了你的问题吗?