如何遍历列中的行并使用Python计算它们?

时间:2011-10-07 15:40:17

标签: python loops count

我正在尝试使用Python在访问表中循环遍历列。我的列按升序排序。

我试图循环遍历行,当列中的值发生变化时,我想得到所有这些值的计数。在下面的示例列中,我想要计算的第一组值是M1。当下一行更改为M21时,我想计算M21,直到它变为M23b,依此类推。

我不想使用if / else语句,因为有几百种不同的可能值。我在groupby模块中使用itertools函数,但我无法解决语法在我的示例中工作。我也试过一个像if row != row.next(): do_something这样的傻傻的循环,但是在我的脸上爆炸了。如果有人可以建议一个解决方法或向我展示一个样本脚本,我会很感激。

示例列:

M1
M1
M1
M21
M21
M23b
M23b
S2
S23b
S23B
O1
O2
O2
O2

2 个答案:

答案 0 :(得分:4)

您使用itertools.groupby的直觉是正确的:

for key, group in groupby(column):
    count = sum(1 for item in group) # Thanks JBernardo
    # the key is what is in the column, count is the number of items

或者,如果您需要的只是计数,那就简单如下:

from collections import Counter # Python 2.7+

group_counts = Counter(column)

您可以将Counter实施为:

from collections import defaultdict:

group_counts = defaultdict(int)

for item in column:
    group_counts[item] += 1

在旧版本的Python上。

答案 1 :(得分:1)

如果您想在执行其他工作的循环中添加打印,以下内容可能会有所帮助:

from collections import Counter  # or defaultdict

col_counts = Counter()           # or defaultdict(int)

last_value = object()            # won't show up in table
for row in access_table:
    col_counts[row[field]] += 1
    if row[field] != last_value:
        print(col_counts[last_value])
        last_value = row[field]
    ...
    other_processing()
    ...