for循环中的Python计数器类行为与理解

for循环中的Python计数器类行为与理解,python,for-loop,counter,dictionary-comprehension,Python,For Loop,Counter,Dictionary Comprehension,有人能解释为什么在循环中使用计数器类与在理解中使用计数器类时,计数器类的行为会发生变化吗?下面是一个简单的例子: >>> seqs = ["GATAGCTCGC", "GTAGAGCTCGCTC", "GTATATAGCTCGCCTG"] >>> import collections >>> counts1 = collections.Counter() >>> for seq in seqs: ... counts

有人能解释为什么在循环中使用计数器类与在理解中使用计数器类时,计数器类的行为会发生变化吗?下面是一个简单的例子:

>>> seqs = ["GATAGCTCGC", "GTAGAGCTCGCTC", "GTATATAGCTCGCCTG"]
>>> import collections
>>> counts1 = collections.Counter()
>>> for seq in seqs:
...     counts1.update(seq)
... 
>>> counts1
Counter({'G': 11, 'C': 11, 'T': 10, 'A': 7})
>>> counts2 = collections.Counter(seq for seq in seqs)
>>> counts2
Counter({'GTAGAGCTCGCTC': 1, 'GATAGCTCGC': 1, 'GTATATAGCTCGCCTG': 1})
为什么更新方法将输入字符串拆分为字符,并对字符进行计数,而不是对整个字符串对象进行计数?如何在for循环中获得后一种行为?

update()
期望一个iterable并尝试在其上迭代,字符串是iterable:

for seq in seqs:
    counts1.update(seq)
seq
gatagctgc
,将用作
['G'、'A'、'T'…]


要具有相同的行为,请为其提供一个列表:

for seq in seqs:
    counts1.update([seq])
update()
需要一个iterable并尝试对其进行迭代,字符串是iterable:

for seq in seqs:
    counts1.update(seq)
seq
gatagctgc
,将用作
['G'、'A'、'T'…]


要具有相同的行为,请为其提供一个列表:

for seq in seqs:
    counts1.update([seq])

字符串、列表和其他内容在Python中是“”,这意味着它们可以循环使用。在
for
循环中,将每个字符串传递给
counts1.update()
。由于字符串是一个iterable,
counts1.update()
逐字符遍历字符串,计算单个字符


在列表理解中,列表理解本身是一个可匹配的元素,提供了三个元素
collections.Counter()
迭代运行给定的iterable,该iterable只包含三个元素,并对每个元素进行计数。

字符串、列表和其他内容在Python中为“”,这意味着它们可以循环。在
for
循环中,将每个字符串传递给
counts1.update()
。由于字符串是一个iterable,
counts1.update()
逐字符遍历字符串,计算单个字符


在列表理解中,列表理解本身是一个可匹配的元素,提供了三个元素
collections.Counter()
遍历给定的iterable,该iterable只有三个元素,并对每个元素进行计数。

使用
update
传递一个经过遍历的iterable,并对值进行计数。因为
str
被认为是可编辑的,所以每个字符都作为一个单独的元素来计算


在构造函数的情况下,iterable由整个字符串组成,因此strigns将被计数,而不是它们所包含的字符。

使用
update
传递一个经过遍历的iterable,并对值进行计数。因为
str
被认为是可编辑的,所以每个字符都作为一个单独的元素来计算


在构造函数的情况下,iterable由整个字符串组成,因此strigns将被计数,而不是它们所包含的字符。

在第一种情况下,您使用多个序列(字符)更新它,在后一种情况下,您只向它提供一个序列(字符串)。您认为这是过于复杂了吗
对于seqs中的seq:counts1[seq]+=1
在第一种情况下,您使用多个序列(字符)对其进行更新,在后一种情况下,您仅向其提供一个序列(字符串)。您是否认为这过于复杂了<代码>对于序列中的序列:counts1[seq]+=1