Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 集合计数器()函数_Python 3.x - Fatal编程技术网

Python 3.x 集合计数器()函数

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()函数

python中的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等语句不会分配给该类。它分配给匿名目标,因为无法再次引用
计数器(…)
的结果。它也不会引发副作用,这只有属性和订阅分配才能做到。因此,这从来没有实际意义,是被禁止的。还请注意,
计数[行[导入通信]]
的等价物实际上是
计数器()[行[导入通信]]]
(注意括号的不同位置),这是有效的。