按顺序计数

时间:2016-10-09 00:07:25

标签: function

假设我想在序列xs中计算它在v中出现的次数,并以相同的顺序返回列表中的整数。包括重复。这是我到目前为止的代码,我有点不知所措。试着保持简单没有 .count funcs,什么不是。

def count_each(xs,v):
count = []
for i in range(len(xs)):
    if xs(i) == v:
        return count.append(i)
    return count

3 个答案:

答案 0 :(得分:2)

您可以使用列表方法count()

>>> keys = [10, 20, 30]
>>> search = [10, 20, 50, 20, 40, 20]
>>> print [search.count(key) for key in keys]
[1, 3, 0]

或者 O(n)

>>> from collections import Counter
>>> c = Counter(search)
>>> print [c[key] for key in keys]
[1, 3, 0]

答案 1 :(得分:0)

以下是使用collections.defaultdict实现此目的的示例函数:

from collections import defaultdict

def count_each(xs, v):
    count = defaultdict(int)
    for item in v:
        if item in xs:
           count[item] += 1
    return [count[item] for item in xs]

或者,使用简单的dict作为:

def count_each(xs, v):
    count = {}
    for item in v:
        if item in xs:
           if item not in count:
               count[item] = 0
           count[item] += 1
    return [count.get(item, 0) for item in xs]

示例电话:

>>> count_each([10,20,30],[10,20,50,20,40,20])
[1, 3, 0]

答案 2 :(得分:0)

您可以使用功能list.count(element)来计算element

中的list

所以你的代码看起来像这样

def count_each(xs, v):

    result = []

    for element in xs:
        result.append( v.count(element) )

    return result

count_each([10,20,30],[10,20,50,20,40,20])

或者您可以使用list comprehension将其写得更短 - 请参阅@mrdomoboto answer。

编辑:相同的没有 count()

def count_each(xs, v):

    result = []

    for element in xs:

        count = 0

        for x in v:
            if x == element:
                count += 1

        result.append( count )

    return result

count_each([10,20,30],[10,20,50,20,40,20])

BTW:您无法使用dict执行此操作,因为dict不必保留订单。有一次你可以获得结果[1,3,0]但是另一次[3,1,0][0,1,3]等等。