2017-05-26 143 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

相关问题