Python过滤列表? - Lambda函数

时间:2014-03-17 21:11:00

标签: python lambda

我在这里有两个列表:

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

2 个答案:

答案 0 :(得分:0)

print "yellow: %d" % len( filter( lambda x: x == "yellow", c ) )

答案 1 :(得分:0)

  

我害怕说你不能只使用任何导入或循环   过滤,减少或len

mmkay。我会注意到filterreduce(以及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中的函数式编程。