y***a 发帖数: 840 | 1 假设listoflist的每个成员都是一个整数list, 成员LIST的大小都一样,但是是个
RUNTIME才知道的。
listoflist本身的成员个数也是RUNTIME才知道,
比如
listoflist=[[1,1,1,1...], [2,2,2,2...], [4,4,4,4...] ...]
怎么写个LIST comprehension,生成另外一个LIST, 这个LIST每个成员是listoflist
里每个成员list的相应成员的或
比如,上面的例子如果没有省略号, 结果应该是[7,7,7,7]
list comprehension用的还不熟,请指教下。谢谢 | H****S 发帖数: 1359 | 2 用reduce加一层list comprehension就好了,不要折磨自己大脑:) | y***a 发帖数: 840 | 3 头一次听说REDUCE, 先谢再试
【在 H****S 的大作中提到】 : 用reduce加一层list comprehension就好了,不要折磨自己大脑:)
| y***a 发帖数: 840 | 4 this seems work:
reduce( lambda x,y: [i[0]|i[1] for i in zip(x,y)] ,listoflist)
but performance wise, the order of computation is not efficient. I hope it
could OR all the 1st element then do the 2nd element. But the above code is
doing list by list compuation, which is inefficient.
any better solution?
【在 y***a 的大作中提到】 : 头一次听说REDUCE, 先谢再试
| y***a 发帖数: 840 | 5 [ reduce( lambda x,y:x|y, j , 0) for j in [ [ i[s] for i in listoflist
] for s in range(len(listoflist[0]))] ]
it is ugly
is
【在 y***a 的大作中提到】 : this seems work: : reduce( lambda x,y: [i[0]|i[1] for i in zip(x,y)] ,listoflist) : but performance wise, the order of computation is not efficient. I hope it : could OR all the 1st element then do the 2nd element. But the above code is : doing list by list compuation, which is inefficient. : any better solution?
| n******7 发帖数: 12463 | 6 import numpy as np
sum(np.array(listoflist)) | H****S 发帖数: 1359 | 7 I would use unzip/transpose in scala, and surprisingly Python has this out
of the box too :)
http://stackoverflow.com/questions/19339/a-transpose-unzip-func
is
【在 y***a 的大作中提到】 : this seems work: : reduce( lambda x,y: [i[0]|i[1] for i in zip(x,y)] ,listoflist) : but performance wise, the order of computation is not efficient. I hope it : could OR all the 1st element then do the 2nd element. But the above code is : doing list by list compuation, which is inefficient. : any better solution?
| m********5 发帖数: 17667 | 8 别误入歧途了
我10年前也是成天诼磨这种茴字有几种写法,后来发现实际应用中根本没有。
用map,reduce这些因为内部纯C实现的,是能提高一些效率,因此在读起来写起来很直
白的时候可以适当应用。而list comprehension 原本是为了增加阅读性的,你如果写
一个list comprehension还要绞尽脑汁,别人怎么读? 停吧! 这既提高不了运行效率
,又让人读得难受的code千万别写。
要追求效率用java,要追求更高的效率用C吧。python应该是流畅地像谈心一样的书写。
读起来也应该像读轻小说一样容易。
如果为了考验智力,节省code行数,大可以用brainfuck, FALSE,写出来的code除了你
没人能看懂,好多程序只要十几个字符搞定,多高端大气上档次!
python还有一个方向是像写日记一样轻快,写完几乎不用debug就直接跑,跑完就扔。
為什麼跑完就扔呢?因为这种日记一样的书写方式会大量使用一些黑话,比如最常见的
var=default_val,*args,**kwds。这种东西在当时写起来异常舒适,因为你自己知道哪
些值可以传入,哪些值不写就有默认值。新版本的库加入新控制参数的时候尤为方便,
直接就兼容老应用。但这种code根本没法维护, 即使你再勤快地改写文档,多call几次
以后就犹如泥牛入大海,根本搞不清哪些参数需要传入,哪些还在用默认值。
listoflist
【在 y***a 的大作中提到】 : [ reduce( lambda x,y:x|y, j , 0) for j in [ [ i[s] for i in listoflist : ] for s in range(len(listoflist[0]))] ] : it is ugly : : is
|
| L***s 发帖数: 1148 | 9 In [1]: x=[
...: [1,1,1,1],
...: [2,2,2,2],
...: [4,4,4,4],
...: ]
In [2]: zip(*x)
Out[2]: [(1, 2, 4), (1, 2, 4), (1, 2, 4), (1, 2, 4)]
In [3]: map(sum, zip(*x))
Out[3]: [7, 7, 7, 7]
不谢 | y***a 发帖数: 840 | 10 那么严肃干啥?
弄个BRAIN TEASER来玩玩, 又没问你我要不要怎么写, 我不是论文答辩,不是
BUSINESS PLAN, 你知道就回答,不知道看看走开就行了, 没请教你前途问题, 这
么多废话。我是新手你也不用给我塞这么多毫无关系的东西
【在 m********5 的大作中提到】 : 别误入歧途了 : 我10年前也是成天诼磨这种茴字有几种写法,后来发现实际应用中根本没有。 : 用map,reduce这些因为内部纯C实现的,是能提高一些效率,因此在读起来写起来很直 : 白的时候可以适当应用。而list comprehension 原本是为了增加阅读性的,你如果写 : 一个list comprehension还要绞尽脑汁,别人怎么读? 停吧! 这既提高不了运行效率 : ,又让人读得难受的code千万别写。 : 要追求效率用java,要追求更高的效率用C吧。python应该是流畅地像谈心一样的书写。 : 读起来也应该像读轻小说一样容易。 : 如果为了考验智力,节省code行数,大可以用brainfuck, FALSE,写出来的code除了你 : 没人能看懂,好多程序只要十几个字符搞定,多高端大气上档次!
| | | n******7 发帖数: 12463 | 11 。。。
【在 y***a 的大作中提到】 : 那么严肃干啥? : 弄个BRAIN TEASER来玩玩, 又没问你我要不要怎么写, 我不是论文答辩,不是 : BUSINESS PLAN, 你知道就回答,不知道看看走开就行了, 没请教你前途问题, 这 : 么多废话。我是新手你也不用给我塞这么多毫无关系的东西
| l*********o 发帖数: 3091 | 12 说的好。
【在 m********5 的大作中提到】 : 别误入歧途了 : 我10年前也是成天诼磨这种茴字有几种写法,后来发现实际应用中根本没有。 : 用map,reduce这些因为内部纯C实现的,是能提高一些效率,因此在读起来写起来很直 : 白的时候可以适当应用。而list comprehension 原本是为了增加阅读性的,你如果写 : 一个list comprehension还要绞尽脑汁,别人怎么读? 停吧! 这既提高不了运行效率 : ,又让人读得难受的code千万别写。 : 要追求效率用java,要追求更高的效率用C吧。python应该是流畅地像谈心一样的书写。 : 读起来也应该像读轻小说一样容易。 : 如果为了考验智力,节省code行数,大可以用brainfuck, FALSE,写出来的code除了你 : 没人能看懂,好多程序只要十几个字符搞定,多高端大气上档次!
| l*********o 发帖数: 3091 | 13 所以,你也承认,一点儿不实用。
【在 y***a 的大作中提到】 : 那么严肃干啥? : 弄个BRAIN TEASER来玩玩, 又没问你我要不要怎么写, 我不是论文答辩,不是 : BUSINESS PLAN, 你知道就回答,不知道看看走开就行了, 没请教你前途问题, 这 : 么多废话。我是新手你也不用给我塞这么多毫无关系的东西
| y***a 发帖数: 840 | 14 我没说实用
【在 l*********o 的大作中提到】 : 所以,你也承认,一点儿不实用。
| y***a 发帖数: 840 | 15 this one looks nicer. thx
【在 H****S 的大作中提到】 : I would use unzip/transpose in scala, and surprisingly Python has this out : of the box too :) : http://stackoverflow.com/questions/19339/a-transpose-unzip-func : : is
| y***a 发帖数: 840 | 16 这个跟HOBOCS给的那个链接比较像, 比我一开始那个好看不少
【在 L***s 的大作中提到】 : In [1]: x=[ : ...: [1,1,1,1], : ...: [2,2,2,2], : ...: [4,4,4,4], : ...: ] : In [2]: zip(*x) : Out[2]: [(1, 2, 4), (1, 2, 4), (1, 2, 4), (1, 2, 4)] : In [3]: map(sum, zip(*x)) : Out[3]: [7, 7, 7, 7] : 不谢
| k****0 发帖数: 7 | 17 [sum(i) for i in zip(*listoflist)] |
|