Python 不使用计数器对列表中的元素进行计数
应返回以下格式的词典:Python 不使用计数器对列表中的元素进行计数,python,counter,control-flow,Python,Counter,Control Flow,应返回以下格式的词典: key_count([1, 3, 2, 1, 5, 3, 5, 1, 4]) ⇒ { 1: 3, 2: 1, 3: 2, 4: 1, 5: 2, } 我知道最快的方法是: import collections def key_count(l): return collections.Counter(l) 但是,我希望在不导入集合的情况下执行此操作。计数器 到目前为止,我已经: x = [] def key_count(
key_count([1, 3, 2, 1, 5, 3, 5, 1, 4]) ⇒ {
1: 3,
2: 1,
3: 2,
4: 1,
5: 2,
}
我知道最快的方法是:
import collections
def key_count(l):
return collections.Counter(l)
但是,我希望在不导入集合的情况下执行此操作。计数器 到目前为止,我已经:
x = []
def key_count(l):
for i in l:
if i not in x:
x.append(i)
count = []
for i in l:
if i == i:
我试图将字典的两边(键和值)提取到单独的列表中,然后使用
zip
创建字典,从而解决了这个问题。正如您所看到的,我能够提取最终字典的键,但是我不知道如何将原始列表中每个数字的出现次数添加到新列表中。我想创建一个空的列表计数,它最终将是一个数字列表,表示原始列表中每个数字出现的次数。有什么建议吗?请不要给出完整的答案,因为我正在努力解决这个问题!提前感谢当您可以直接构建dict时,分离键和值是一件非常费力的事情。这是算法。我将把实现留给您,尽管它有点实现自己
当您可以直接构建dict时,分离键和值是一件很费劲的事情。这是算法。我将把实现留给您,尽管它有点实现自己
使用字典对键和值进行配对,并使用x[]跟踪找到的不同项
import collections
def keycount(l):
return collections.Counter(l)
key_count=[1, 3, 2, 1, 5, 3, 5, 1, 4]
x = []
dictionary ={}
def Collection_count(l):
for i in l:
if i not in x:
x.append(i)
dictionary[i]=1
else:
dictionary[i]=dictionary[i]+1
Collection_count(key_count)
[print(key, value) for (key, value) in sorted(dictionary.items())]
使用字典对键和值进行配对,并使用x[]跟踪找到的不同项
import collections
def keycount(l):
return collections.Counter(l)
key_count=[1, 3, 2, 1, 5, 3, 5, 1, 4]
x = []
dictionary ={}
def Collection_count(l):
for i in l:
if i not in x:
x.append(i)
dictionary[i]=1
else:
dictionary[i]=dictionary[i]+1
Collection_count(key_count)
[print(key, value) for (key, value) in sorted(dictionary.items())]
经典的reduce问题。使用循环:
a = [1, 3, 2, 1, 5, 3, 5, 1, 4]
m = {}
for n in a:
if n in m: m[n] += 1
else: m[n] = 1
print(m)
或明确减少:
from functools import reduce
a = [1, 3, 2, 1, 5, 3, 5, 1, 4]
def f(m, n):
if n in m: m[n] += 1
else: m[n] = 1
return m
m2 = reduce(f, a, {})
print(m2)
经典的reduce问题。使用循环:
a = [1, 3, 2, 1, 5, 3, 5, 1, 4]
m = {}
for n in a:
if n in m: m[n] += 1
else: m[n] = 1
print(m)
或明确减少:
from functools import reduce
a = [1, 3, 2, 1, 5, 3, 5, 1, 4]
def f(m, n):
if n in m: m[n] += 1
else: m[n] = 1
return m
m2 = reduce(f, a, {})
print(m2)
不要创建列表。你只需要一个dict就可以做到这一点。最简单的解决方案是使用循环和if-else“我希望不用导入集合计数器就可以做到”——这听起来很疯狂,也许你也希望不用循环,或任何其他此类任意限制:-)是否仅禁止您使用
集合。计数器,或不允许您导入任何内容?例如,集合如何。defaultdict
?因此我仍在学习该语言,这个问题应该可以帮助我学习控制流和集合使用方面的知识。计数器不会这样做。不要创建列表。你只需要一个dict就可以做到这一点。最简单的解决方案是使用循环和if-else“我希望不用导入集合计数器就可以做到”——这听起来很疯狂,也许你也希望不用循环,或任何其他此类任意限制:-)是否仅禁止您使用集合。计数器,或不允许您导入任何内容?例如,集合如何。defaultdict
?因此我仍在学习这门语言,这个问题应该可以帮助我学习控制流和集合使用方面的知识。计数器不会这样做,这并不粗鲁,但这真的很混乱keycount
未使用,x
是无意义的,因为您还可以检查dict(字典
)和(打印
)中的成员身份。最后,Collection\u count
隐式修改了dictionary
,这使得调试更加困难;一般避免可变的全局状态;最好是显式地传入dict。。我忘了提;你可以用L
来代替。我只是使用原始代码,试图坚持最初的想法,但他认为建议不要粗鲁,但这真的很混乱keycount
未使用,x
是无意义的,因为您还可以检查dict(字典
)和(打印
)中的成员身份。最后,Collection\u count
隐式修改了dictionary
,这使得调试更加困难;一般避免可变的全局状态;最好是显式地传入dict。。我忘了提;你可以使用L
来代替。我只是使用原始代码,试图坚持最初的想法,但是thaks提供了建议谢谢你列出了步骤!我按照您的建议进行了尝试,最终得到了与您链接的实现类似的结果!再次感谢!感谢您列出这些步骤!我按照您的建议进行了尝试,最终得到了与您链接的实现类似的结果!再次感谢!