我在这里有两个列表:
c=["red", "blue", "green", "yellow", "purple", "orange", "white", "black"]
然后我有以下两个序列产生五十种随机颜色的列表:
nuSequence = map(lambda x : random.randint(0,7),range(50))
colSequence = map(lambda i: c[i], nuSequence)
print colSequence
接下来是这个小功能,它按照列表的顺序存储事件列表' c'。
count2 = map(lambda x: nuSequence.count(x),range(len(c)))
我需要做的是打印出颜色的名称,然后是它出现的次数,如下所示:blue - 7
,反之亦然。
我害怕说你不能使用任何仅使用过滤器的导入或循环,而是使用reduce或len
答案 0 :(得分:0)
print "yellow: %d" % len( filter( lambda x: x == "yellow", c ) )
答案 1 :(得分:0)
我害怕说你不能只使用任何导入或循环 过滤,减少或len
mmkay。我会注意到filter
和reduce
(以及map
和...)都使用循环,只是隐藏在本机代码中。
def update_agg(agg,x):
agg[x] = agg.get(x,0)+1
return agg
reduce(lambda agg,x: update_agg(agg,x), colSequence, {})
Out[130]:
{'black': 4,
'blue': 5,
'green': 6,
'orange': 5,
'purple': 6,
'red': 8,
'white': 10,
'yellow': 6}
然后格式化dict
,但是如果输出对你不够好,你可以格式化。
编辑: lambdas只是匿名函数。但如果你真的不想def
,我们可以从技术上做到这一点......
reduce(lambda agg,x: agg.__setitem__(x,agg.get(x,0)+1) or agg, colSequence, {})
请注意lambda语法是如何使事物几乎不可读的。这是python中的函数式编程。