浏览 3965 次
锁定老帖子 主题:Python 记录.
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-16
最后修改:2010-01-16
>>>list1 = map(lambda x: '%s' % x,range(0,28)) # len(list1) == 28 '['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27']' >>>list2 = range(5, 33) # len(list2) == 28 '[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]' # 大小相同... #2个list数据依依对应,list2有可能有重复值,所以不能用字典. #要求: #1>查找list2中小于15,并且大于2的数字 #2>把查找到的结果返回对应list1的结果 >>>filter(lambda x : x ,map(lambda x :2 <x <15 and list1[list2.index(x)], list2)) ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] end.. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-16
最后修改:2010-01-16
根本不需要map和filter:
>>> list1 = (`x` for x in xrange(28)) >>> list2 = xrange(5, 33) >>> [x[0] for x in zip(list1, list2) if 2 < x[1] < 15] ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] |
|
返回顶楼 | |
发表时间:2010-01-16
keakon 写道 根本不需要map和filter:
>>> list1 = (`x` for x in xrange(28)) >>> list2 = xrange(5, 33) >>> [x[0] for x in zip(list1, list2) if 2 < x[1] < 15] ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] Guido当年就说有了list comprehension就没必要在核心库里留着map、filter和reduce与lambda的组合;结果经过争论map和filter还是留下来了,reduce则给干到了functools模块里。 咳,generator+list comprehension多方便啊…… |
|
返回顶楼 | |
发表时间:2010-01-16
多谢.....
|
|
返回顶楼 | |
发表时间:2010-01-16
map(lambda x:x[0], filter(lambda x: 2 < x[1] < 15, zip(list1, list2))) 为什么我老是喜欢这些函数呢... |
|
返回顶楼 | |
发表时间:2010-01-26
最后修改:2010-01-26
One application of list comprehension : find out the prime numbers of a given numbers list.
<<< l = [x for x in xrange(2,100) if 0 not in [x%y for y in xrange(2,x)]] #list comprehension <<< l [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] But when the numbers list increases largely, list comprehension above has bad efficiency. |
|
返回顶楼 | |