【发布时间】:2020-03-31 11:22:12
【问题描述】:
我有以下问题。我必须实现一个作为生成器的函数,它需要任意数量的迭代。可以假设迭代器每次都以相同的顺序发布它们的元素。该函数应返回所有可迭代对象(视图断言)中位于同一位置的所有元素:
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]
很高兴能通过解释解决我的问题。
【问题讨论】:
-
我建议对每个函数调用的每个可迭代(仅一次)使用
next()(并保留相同的可迭代) -
iterables是一个迭代列表。因此,您的for obj in iterables不会比较不同列表之间的元素,obj始终是列表之一!例如。对于intersect((1,2,3), (1,"x",3)),您的obj在第一次迭代期间为(1,2,3),在第二次迭代期间为(1,"x",3)。