2017-05-26 163 views
0

我正在使用Python 2.7。如果我有列表將列表中的元素與同一列表中的每個其他元素進行比較

a = [1,2,3,4,5] 

,我想一個新的listthat包含有類似

b = [a[0]*a[1], a[0]*a[2], a[0]*a[3], a[0]*a[4], a[1]*a[0], a[1]*a[2], ... ] 

,其中每個元素是由其他元素mulitplied但不要muliply要求自己。我的直覺告訴我做以下(在一個非常不Python的方式):

b = [] 
for i in range(0,len(a)): 
    b.append(a[i]*a[i+1]) 

但這只是在列表中執行任務的第一個元素

+0

我想你可以使用'itertools':'[X * Y的X,Y在ITER tools.combinations(a,2)]' – vaultah

+0

從itertools導入組合導入itertools [x * y for x,y在itertools.combinations(a,2)]中產生錯誤消息'module'對象不可迭代 –

+0

我不是肯定vaultah。輸出意味着組合s將重複...'a [0] * a [1]'和'a [1] * a [0]'itertools.combinations'不會給你... –

回答

0

您可以使用執行乘法運算列表理解enumerate允許跳過自乘法與過濾

prods = [x*y for i, x in enumerate(a) for j, y in enumerate(a) if i!=j] 
print(prods) 
# [2, 3, 4, 5, 2, 6, 8, 10, 3, 6, 12, 15, 4, 8, 12, 20, 5, 10, 15, 20] 
+0

是的非常感謝你這是我尋找python的回答 –

+0

只是一個側面說明,如果你寫在多行:它往往更漂亮,更容易閱讀: https://pastebin.com/u1nfUqLf –

+0

@MarkusMeskanen如果您發現自己不得不將列表解析分解爲多行,那麼您可能不應該在那裏使用列表解析。 – poke

相關問題