2015-10-16 81 views
4

尋找縮減列表comprehesion和更少的循環和內存使用情況,有一些方法可以減少兩個循環來構建最終路徑,將其轉換爲單個列表comprehesion?將多個列表複製到單個語句中

def build_paths(domains): 

    http_paths = ["http://%s" % d for d in domains] 
    https_paths = ["https://%s" % d for d in domains] 

    paths = []           
    paths.extend(http_paths)       
    paths.extend(https_paths) 

    return paths       

在這種情況下,該預期的結果是一個優化的列表comprehesion,從三個列表的引用(http_pathshttps_pathspaths)減少到一個單一的一條線,如以下示例所示結構:

def build_paths(domains): 
    return [<reduced list comprehesion> for d in domains] 

在這兩種情況下,運行以下測試:

domains = ["www.ippssus.com",      
      "www.example.com",      
      "www.mararao.com"]      

print(build_paths(domains)) 

預計輸出,獨立的名單順序:

< ['http://www.ippssus.com', 'http://www.example.com', 'http://www.tetsest.com', 'https://www.ippssus.com', 'https://www.example.com', 'https://www.tetsest.com'] 
+1

http://stackoverflow.com/questions/11868964/python-list-comprehension-returning-two-or-more-items-for-each-item –

+0

好的解決方案!這取決於進口聲明,但是一個好方法!爲了簡單起見,我會嘗試Martjin提出的解決方案。謝謝! – apast

回答

14

添加第二個循環:

['%s://%s' % (scheme, domain) for scheme in ('http', 'https') for domain in domains] 

這將構建所有http的URL,然後再到https的URL,就像你的原代碼。

+0

謝謝!它工作正常。 – apast

相關問題