是否可以將此函數,列表理解組合轉換爲單個列表理解(因此不需要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)]
是否可以將此函數,列表理解組合轉換爲單個列表理解(因此不需要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)]
我覺得這是它:
multiples[:] = [n for i,n in enumerate(multiples)
if all(n % small for small in multiples[i+1:])]
+1這看起來比我原來的代碼更具可讀性。不過,這有點主觀。 – 2010-09-10 21:52:20
multiples[:] = [n for i, n in enumerate(multiples) if 0 not in [n % other for other in multiples[i+1:]]
Advisible?可能不會。
+1缺乏可取性。 – llasram 2010-09-10 21:38:43
首先要學會在代碼中不使用list
這樣的名字。還記得「先讓它工作,然後優化」。如果你繼續學習東西,可能無論如何,在一個月之後,你對代碼並不滿意。嘗試做出可讀的代碼。爲此,如果你可以(天堂禁止!)在擱置幾周後閱讀你自己的代碼,它會有所幫助。也就是說,它有時更容易理解列表理解,但是通常只有在編寫更愚蠢的代碼版本後才能做到這一點。
關於命名變量列表的好處 – 2010-09-10 22:34:46
倍數是什麼樣的? – nmichaels 2010-09-10 21:31:08
你爲什麼要轉換?你的功能有什麼問題?列表理解是爲了使事情更清楚/不晦澀/。 – nosklo 2010-09-10 21:31:17
你能提供一些樣本I/O嗎? – miku 2010-09-10 21:32:20