既然你想要一个单线,这样的事情应该可以帮助你:
a,b = int(all(ele == list(zip(*map(func,p)))[0][0] for ele in list(zip(*map(func,p)))[0])),sum(list(zip(*map(func,p)))[-1])
细分:
map 函数将函数应用于可迭代对象。
list(map(func,p))
打印:
[(1, 3), (2, 4), (3, 5)]
这个:
list(zip([(1, 3), (2, 4), (3, 5)]))
打印:
[((1, 3),), ((2, 4),), ((3, 5),)]
在map 之前添加* 将转置list:
list(zip(*map(func,p)))
打印:
[(1, 2, 3), (3, 4, 5)]
all 函数与简单的列表推导相结合,以查找子列表 1 的所有元素是否相等。这是一个更简单的版本:
all(ele == lst[0] for ele in lst)
在这种情况下也是如此:
all(ele == list(zip(*map(func,p)))[0][0] for ele in list(zip(*map(func,p)))[0])
打印:
False
为了将True/False转换为1/0,我使用了int()函数:
int(all(ele == list(zip(*map(func,p)))[0][0] for ele in list(zip(*map(func,p)))[0]))
打印:
0
它的第二部分,即:sum(list(zip(*map(func,p)))[-1]) 计算第二个子列表的总和。
sum(list(zip(*map(func,p)))[-1])
打印:
12
这里是完整的代码:
def func(a):
return a,a+2
p = [1,2,3]
a,b = all(ele == list(zip(*map(func,p)))[0][0] for ele in list(zip(*map(func,p)))[0])),sum(list(zip(*map(func,p)))[-1])
print(a,b)
输出:
(0, 12)