Здесь нужно понять две вещи:
Вы можете увидеть, как отличаются ваши входные данные, просто добавив оператор print
в свою функцию:
def sort_lists(*args):
print(args)
zipped_list= zip(*sorted(zip(*args)))
return [list(l) for l in zipped_list]
Пусть входной список списков будет: lists = [[2, 1, 3], [1, 3, 4], [5, 4, 2]]
.
sort_lists(lists[0], lists[1], lists[2])
напечатает: ([2, 1, 3], [1, 3, 4], [5, 4, 2])
. Это кортеж внутренних списков.
Хотя, если вы называете это так:
sort_lists(lists[idx] for idx in range(len(lists)))
или
sort_lists(sublist for sublist in lists)
это напечатает (<generator object <genexpr> at 0x0000007001D3FBA0>,)
, одноэлементный кортеж генератора.
Вы можете заставить свою функцию работать с генератором, принимая только один параметр:
def sort_lists(arg):
zipped_list= zip(*sorted(zip(*arg)))
return [list(l) for l in zipped_list]
sort_lists(lists[idx] for idx in range(len(lists)))
# [[1, 2, 3], [3, 1, 4], [4, 5, 2]]
но я предлагаю оставить вашу функцию как есть, а распаковать ваши списки в том месте, где вы ее называете:
>>> sort_lists(*lists)
[[1, 2, 3], [3, 1, 4], [4, 5, 2]]