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

2024-09-30 12:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释为什么在循环中使用Counter类而不是在理解中使用Counter类的行为会发生变化吗?下面是一个简单的例子:

>>> 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})

为什么update方法将输入字符串拆分为字符并计数字符而不是整个字符串对象?如何在for循环中获得后一种行为?在


Tags: 字符串inforcounterupdate字符collectionsseq
3条回答

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

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

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

在列表理解{}中,列表理解本身是一个提供三个元素的iterable。collections.Counter()iterates遍历给定的iterable,它只有三个元素,并对每个元素计数。在

update()需要iterable并将尝试在其上迭代,字符串是iterable:

for seq in seqs:
    counts1.update(seq)

seqGATAGCTCGC,将用作['G', 'A', 'T' ....]


要有同样的行为,给它一个列表:

^{pr2}$

相关问题 更多 >

    热门问题