Python 将列表中的元素与同一列表中的其他元素进行比较

Python 将列表中的元素与同一列表中的其他元素进行比较,python,Python,我正在使用Python 2.7。如果我有名单 a = [1,2,3,4,5] 我想要一个新的列表,其中包含 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], ... ] 其中,每个元素由其他元素叠加,但不与自身叠加。我的直觉告诉我要做以下事情(以一种非常非Python的方式): 但这只是对列表中的第一个元素执行任务您可以使用列表理解和枚举来执行乘法,这允许使用过滤器跳过自乘法: 我想您可以使用iter

我正在使用Python 2.7。如果我有名单

a = [1,2,3,4,5]
我想要一个新的列表,其中包含

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], ... ]
其中,每个元素由其他元素叠加,但不与自身叠加。我的直觉告诉我要做以下事情(以一种非常非Python的方式):


但这只是对列表中的第一个元素执行任务

您可以使用列表理解和
枚举来执行乘法,这允许使用过滤器跳过自乘法:


我想您可以使用
itertools
[x*y表示itertools中的x,y。组合(a,2)]
从itertools导入itertools导入组合[x*y表示itertools中的x,y。组合(a,2)]生成错误消息“module对象不是iterableI我不确定vaultah。输出意味着组合s将被重复
a[0]*a[1]
a[1]*a[0]
哪个
itertools。组合
不会给您……是的,但保留重复产品有什么意义?而且,这只是一个猜测。我不知道,可能有很多。或者可能是打字错误。我认为这是一个合理的猜测,但需要澄清这一点是的,非常感谢这是我一直在寻找的python式答案只是一个旁注,如果你把它写在多行上,它通常会更漂亮,更容易阅读:@MarkusMeskanen如果你发现自己不得不将列表理解拆分为多行,你可能不应该在这里使用列表理解法。@poke好吧,那只是直截了当的否定,只有你的观点。公认的答案就是一个很好的例子:在我看来,一行看起来很糟糕,但多行看起来干净漂亮。从我的头顶。使用列表理解是有意义的,将其拆分为多行也是有意义的。第一句话:你想要什么。第二句话:你想从哪里得到它。第三行:条件。
 b = []
 for i in range(0,len(a)):
     b.append(a[i]*a[i+1])
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]