假设我想在序列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
答案 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]
等等。