Я читал через некоторые старого кода шахты и наткнулся на эту линиюЕсть ли смысл использовать вложенные итераторы?
itertools.starmap(lambda x,y: x + (y,),
itertools.izip(itertools.repeat(some_tuple,
len(list_of_tuples)),
itertools.imap(lambda x: x[0],
list_of_tuples)))
Чтобы было ясно, у меня есть некоторые list_of_tuples
, из которого я хочу, чтобы получить первый элемент из каждого кортежа (itertools.imap
), я есть еще один кортеж, который я хочу повторить (itertools.repeat
), так что есть копия для каждого кортежа в list_of_tuples
, а затем я хочу получить новые более длинные кортежи на основе элементов от list_of_tuples
(itertools.starmap
).
Например, предположим, что some_tuple = (1, 2, 3)
и list_of_tuples = [(1, other_info), (5, other), (8, 12)]
. Я хочу что-то вроде [(1, 2, 3, 1), (1, 2, 3, 5), (1, 2, 3, 8)]
. Это не точный IO (он использует некоторые довольно нерелевантные и сложные классы), и мои фактические списки и кортежи очень большие.
Есть ли смысл встраивать итераторы? Мне кажется, что каждая функция из itertools должна будет перебирать итератор, который я дал ему, и хранить информацию от него где-то, что означает, что нет никакой пользы для размещения других итераторов внутри starmap
. Я просто совершенно не прав? Как это работает?
Если вы покажете нам, что ожидаемый ввод и вывод будет полезен для сопоставления ваших действий – Hackaholic
Нет, по той простой причине, что он делает код слишком трудным для подражания. Keep It Simple –
@gnibbler, так как это возможно, даже удаление его по-прежнему приводит нас к вложенным итераторам, поэтому, если удаление не изменит ответ, мне все еще интересно, есть ли смысл вложенности вообще – Dannnno