B******l 发帖数: 262 | 1 12.4 Imagine you have an unbalanced binary search tree. Design an algorithm
which creates a linked list of all the nodes at each depth (eg, if you have
a tree with depth D, you’ll have D linked lists).
答案如下:
struct LLNode {
LLNode(Node* t, LLNode* n) : next(n), tree(t) {}
LLNode* next;
Node* tree;
};
struct ListOfLists {
ListOfLists() : next(NULL), data(NULL) {}
ListOfLists* next;
LLNode* data;
};
ListOfLists* TreeLinkedLists(Node* root) {
ListOfLists* results = new ListOfLists();
... 阅读全帖 |
|
y***a 发帖数: 840 | 2 假设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用的还不熟,请指教下。谢谢 |
|
y***a 发帖数: 840 | 3 [ 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 发帖数: 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? |
|
n******7 发帖数: 12463 | 5 import numpy as np
sum(np.array(listoflist)) |
|
m********5 发帖数: 17667 | 6 别误入歧途了
我10年前也是成天诼磨这种茴字有几种写法,后来发现实际应用中根本没有。
用map,reduce这些因为内部纯C实现的,是能提高一些效率,因此在读起来写起来很直
白的时候可以适当应用。而list comprehension 原本是为了增加阅读性的,你如果写
一个list comprehension还要绞尽脑汁,别人怎么读? 停吧! 这既提高不了运行效率
,又让人读得难受的code千万别写。
要追求效率用java,要追求更高的效率用C吧。python应该是流畅地像谈心一样的书写。
读起来也应该像读轻小说一样容易。
如果为了考验智力,节省code行数,大可以用brainfuck, FALSE,写出来的code除了你
没人能看懂,好多程序只要十几个字符搞定,多高端大气上档次!
python还有一个方向是像写日记一样轻快,写完几乎不用debug就直接跑,跑完就扔。
為什麼跑完就扔呢?因为这种日记一样的书写方式会大量使用一些黑话,比如最常见的
var=default_val,*args,**kwds。这种东西在当时写起来异常舒适,因为你自己知道哪
些值可以传入,哪些值不写就有默认值... 阅读全帖 |
|
k****0 发帖数: 7 | 7 [sum(i) for i in zip(*listoflist)] |
|