>>> a = [1,2,3]
>>> b = [3,1,4]
>>> [l for l in map(lambda o,p: (o,p) if o!=p else [], [i for j in [a,a[1::2],a[::-2],a[::-1]] for i in j], [d for c in [[k,k,k] for k in b] for d in c])if l]
[(1, 3), (2, 3), (2, 1), (3, 1), (3, 4), (2, 4), (1, 4)]
或
>>> list(filter(lambda o: o[0]!=o[1], zip([i for j in [a,a[1::2],a[::-2],a[::-1]] for i in j], [d for c in [[k,k,k] for k in b] for d in c])))
[(1, 3), (2, 3), (2, 1), (3, 1), (3, 4), (2, 4), (1, 4)]
2条答案
按热度按时间6g8kf2rb1#
使用
itertools.product()
获取所有x
和y
组合,使用filter()
跳过x == y
。在本例中不需要
map()
,因为itertools.product()
已经创建了元组。iyr7buue2#
为什么你需要一个lambda(匿名)函数或一个函数到值的Map,如果你非常简单并且仍然可读的列表理解与美丽的if条件做得很好?
保持简单,保持良好。
如果你坚持使用map和lambda作为你的具体示例,你可以(也不应该):
或
不过,这显然是无稽之谈,好只是玩玩而已。是的,如果你愿意,你可以把它变得更复杂,在列表解析扩展中用它们自己的函数表示替换a和b。是的,如果你有可变长度的输入列表,这也可以做到--甚至更难读。