Python返回参数组成新元组

#344
函数 main) 接收两个等长的元组 x和y 作为参数,其中x中的所有元素各不相同,
要求返回x中部分元素组成的新元组,如果x中某个元素y中对应位置上的元素等价于True,就保留x中的这个元素,最后返回所有符合条件的元素组成新的元组。
例如,main(1,2,3,4),(1,0,0,1))返回(1,4)。
不能使用循环结构,不能使用列表推导式或生成器表达式,不能有多余输出。
考点:元组
什么叫“对应位置上的元素等价于True”?它没说两个元素“相等”。

def main(x,y):
    return x,y
'''
答题错误!您的代码执行结果为:
((1, 2, 3, 4), (1, 0, 0, 1))
(('a', 'b', 'c'), (0, 1, 0))
'''
def main(x,y):
    #return x,y
    return(map(str,(x,y)))
'''
答题错误!您的代码执行结果为:


'''
def main(x,y):
    #tup1 = ()        #元组中的元素值不允许删除
    if x == y:
        return(map(str,(x,y)))
'''
答题错误!您的代码执行结果为:
None
None
'''

可以使用内置函数filter:

def main(x: tuple, y: tuple):
    return tuple(filter(lambda a: y[x.index(a)], x))  # y[x.index(a)] 表示 x 中某个元素对应的 y 中的元素,因为 x 中的元素是不重复的,所以可以直接用 index 查询位置

这个函数接收一个lambda和一个可迭代对象,根据lambda返回的值进行筛选

对应位置上的元素等价于True
其实就是考你各种不同类型转换成bool型,比如一个list,如果不是空它就是true,是空它就是false
而如果一个字符串,如果它长度不为0它就是true,长度为0它就是false
如果是int,那么不为0它就是true,为0就是false
当然你没有必要一个一个类型的去判断,直接判断if x[i]就行了,不管x[i]到底是个什么类型
-=-=-=-
此外,元组不允许删除
所以你应该先建立一个空的list,把符合要求的项append进来
最后再把list转成元组返回
或者先把元组转list再删掉里面是false的项,再转回元组,也行
-=-=-==-
注意,是删掉对应的y里是true的那个位置的x,不是x里是true
所以其实应该先for i in range(len(x)),然后判断if y[i],而不是判断x[i]