我需要一个期望任意数量的可迭代对象的函数。为此,您可以假定这些可迭代对象以相同顺序输出其元素。
我需要一个函数,该函数返回元素列表,这些元素位于输入可迭代对象的相同位置(相同索引), 例如。对于[1,2,3]和[1,“ x”,3],将返回1和3。 示例:intersect((1,2,3),(1,2,3),(1,2,3),(1,2,3),(1,2,3),(1,2,3 ))将返回[1,2,3]我尝试过,但是我认为它是完全错误的:C
def intersect(*args):
"""Docstring"""
ausgabe = []
anzahlderlisten = len(args)
count = 1
if(anzahlderlisten == 1):
return args[0]
if(anzahlderlisten == 0):
return []
längsteliste = args[0]
while count < anzahlderlisten:
for i in längsteliste:
if not i in args[count] and längsteliste.index(i) == args[count].index(i):
print("db")
if not(i in ausgabe):
print("db")
ausgabe.append(i)
count = count + 1
return ausgabe
答案 0 :(得分:0)
一种可能性如下:
def all_same(items):
return all(item == items[0] for item in items[1:])
def get_agreeing(*iterables):
assert len(iterables) >= 2
return (row[0] for row in zip(*iterables) if all_same(row))
print(tuple(get_agreeing(range(3), range(1, 4), range(3))))
print(tuple(get_agreeing(range(3), (0, 4, 2), (1, 0, 2))))
get_agreeing
使用可变参数,这意味着采用任意数量的参数,将其置于可迭代状态,然后将其传递给函数。那是通过*语法完成的。
然后我们再次使用星号将这些参数传递给zip函数,方法与传递给get_agreeing
的方式相同
因此,如果将可迭代对象视为列向量,则可以将所有第一个元素视为一行。对于此行,您只需要检查所有元素是否相同,如果相同,则生成的返回值将返回其中的第一个元素。
如果您想了解有关可变参数或生成器的更多信息,请参见: