我有以下问题。我必须实现一个作为生成器的函数,它需要任意数量的iterable。可以假设iterables每次都以相同的顺序发布它们的元素。函数应返回所有iterables(视图断言)中位于同一位置的所有元素:
def intersect(*iterables, **kwiterables):
for obj in iterables:
#need help here :)
#already tried something like:
# obj = (var for var in obj if var in iterables)
yield obj
#asserts:
assert list(intersect((1,2,3))) == [1,2,3]
assert list(intersect((1,2,3), (1,"x",3))) == [1,3]
assert list(intersect([1,1,1,1,1,1,1,1,1], [1,2,1,2,1,2,1,2,1,2], k = [3,3,1,3,3,1,3,3,1,3,3,1])) == [1,1]
我很高兴能解释一下我的问题。你知道吗
可以使用^{} 内置函数并行迭代所有iterables。你知道吗
例如,
zip(it_a, it_b, it_c)
迭代三元组(a, b, c)
,其中a
来自it_a
,b
来自it_b
,c
来自it_c
。第一个三元组包含iterables的第一个元素,第二个三元组包含第二个元素,依此类推。您可以将其与*
语法结合起来,通过传递任意数量的参数来获得zip(*iterables)
,这将产生包含所有元素的n元组。(您可以进一步传递*iterables
和*kwiterables.values()
来组合iterables
和kwiterables
。)最后,一旦您得到值的“行”,您只需要检查该行的所有元素是否相等。你知道吗最终结果如下(通过测试):
相关问题 更多 >
编程相关推荐