2010-09-10 69 views
0

是否可以將此函數,列表理解組合轉換爲單個列表理解(因此不需要keep)?將函數轉換爲單行列表理解

def keep(list, i, big): 
    for small in list[i+1:]: 
     if 0 == big % small: 
      return False 
    return True 

multiples[:] = [n for i,n in enumerate(multiples) if keep(multiples, i, n)] 
+1

倍數是什麼樣的? – nmichaels 2010-09-10 21:31:08

+2

你爲什麼要轉換?你的功能有什麼問題?列表理解是爲了使事情更清楚/不晦澀/。 – nosklo 2010-09-10 21:31:17

+0

你能提供一些樣本I/O嗎? – miku 2010-09-10 21:32:20

回答

6

我覺得這是它:

multiples[:] = [n for i,n in enumerate(multiples) 
         if all(n % small for small in multiples[i+1:])] 
+1

+1這看起來比我原來的代碼更具可讀性。不過,這有點主觀。 – 2010-09-10 21:52:20

2

multiples[:] = [n for i, n in enumerate(multiples) if 0 not in [n % other for other in multiples[i+1:]]

Advisible?可能不會。

+0

+1缺乏可取性。 – llasram 2010-09-10 21:38:43

1

首先要學會在代碼中不使用list這樣的名字。還記得「先讓它工作,然後優化」。如果你繼續學習東西,可能無論如何,在一個月之後,你對代碼並不滿意。嘗試做出可讀的代碼。爲此,如果你可以(天堂禁止!)在擱置幾周後閱讀你自己的代碼,它會有所幫助。也就是說,它有時更容易理解列表理解,但是通常只有在編寫更愚蠢的代碼版本後才能做到這一點。

+0

關於命名變量列表的好處 – 2010-09-10 22:34:46