Python 3.x 集合计数器()函数
python中的Counter()函数有问题。 我在以下代码中遇到此问题:Python 3.x 集合计数器()函数,python-3.x,Python 3.x,python中的Counter()函数有问题。 我在以下代码中遇到此问题: from collections import Counter counts = Counter() counts1 = [] for row in data: counts[row[IMPORT_COMMUNICATION]] 为什么我们必须首先将Counter()赋值给变量?当我尝试使用下面的代码时,我得到了这个错误。但是counts()函数对吗?这意味着在第一个代码块中,我成功地为Counter()函数
from collections import Counter
counts = Counter()
counts1 = []
for row in data:
counts[row[IMPORT_COMMUNICATION]]
为什么我们必须首先将Counter()赋值给变量?当我尝试使用下面的代码时,我得到了这个错误。但是counts()函数对吗?这意味着在第一个代码块中,我成功地为Counter()函数赋值。在第二个块中,我不能直接为Counter()函数赋值
from collections import Counter
counts = Counter()
counts1 = []
for row in data:
Counter([row[IMPORT_COMMUNICATION]]) += 1
File "<ipython-input-31-a9adc0c8c6ea>", line 6
Counter([row[IMPORT_COMMUNICATION]]) += 1
^
SyntaxError: can't assign to function call
从集合导入计数器
计数=计数器()
counts1=[]
对于数据中的行:
计数器([行[导入通讯]])+=1
文件“”,第6行
计数器([行[导入通讯]])+=1
^
SyntaxError:无法分配给函数调用
计数器()的类型在分配给计数时是否会改变?看起来您有一些问题需要回答 您正试图找出这两行代码之间的差异
counts = Counter()
counts1 = []
计数器是用于计算可散列对象的dict子类。它是一个集合,其中元素存储为字典键,其计数存储为字典值。因此变量counts
将是一个字典
另一方面,变量counts1
是一个列表。另外,稍后您将尝试为计数器类指定一个值。不能将值指定给类。您可以指定给它的一个实例并使用它,如下面的示例所示
你的具体问题就在这里
Counter([row[IMPORT_COMMUNICATION]]) += 1
在上面的代码中,您试图为类计数器分配一个值(或增量)。你不能那样做。您必须先实例化它,然后使用该变量。请阅读Python文档中的更多信息
>>> cnt = Counter()
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
... cnt[word] += 1
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})
您的代码问题已解决如下:
下面是的一个简单实现,如Python文档所示
>>> cnt = Counter()
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
... cnt[word] += 1
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})
让我们看看你的代码,看看发生了什么。我做了一些编辑,以包括丢失的数据项
from collections import Counter
data = [[1,0],[2,3],[4,5],[6,7],[8,8],[7,9],[2,5]]
IMPORT_COMMUNICATION = 0
counts = Counter()
#counts1 = [] - not required. commenting it out
for row in data:
counts[row[IMPORT_COMMUNICATION]] +=1
print (counts)
在您的代码中,您试图遍历数据
,并且对于行
的每个列表项,您希望在行[IMPORT\u COMMUNICATION]
的每个匹配项中添加+1到计数
收集计数器对象中
如果尝试打印计数,您将看到如下输出:
Counter({2: 2, 1: 1, 4: 1, 6: 1, 8: 1, 7: 1})
这就是你想做的吗?在本例中,您将看到列表中有两个项目的第一个位置值为2。这就是为什么2的计数是2,而其他所有计数都是1。从语法上讲,这一行毫无意义:
Counter([row[IMPORT_COMMUNICATION]]) += 1
您试图为函数调用赋值,但正如错误所说,该调用无效。您试图为函数赋值。你不能那样做。您必须将其分配给一个变量。阅读更多关于。我建议您使用英语给出
计数[您想添加的内容]
@Аааааааааplease@Tibebes. M、 是的,对不起。您应该添加示例IMPORT\u COMMUNICATION
和data
。否则,您的示例将无法复制。即使这是有效的,您也只需在每次迭代中创建一个新计数器,然后将其丢弃,因为没有引用它的名称。比较计数器()。但是,如果我直接使用Counter(),这是无效的。为什么会这样?计数器是一个类。您正在尝试分配给一个类。你不能那样做。您必须实例化该类,然后使用它。请注意,Counter(…)+=1等语句不会分配给该类。它分配给匿名目标,因为无法再次引用计数器(…)
的结果。它也不会引发副作用,这只有属性和订阅分配才能做到。因此,这从来没有实际意义,是被禁止的。还请注意,计数[行[导入通信]]
的等价物实际上是计数器()[行[导入通信]]]
(注意括号的不同位置),这是有效的。