Чередование кортежей

Определите функцию interleaved_tuple_two, которая принимает два аргумента, tuple_a и tuple_b, которая возвращает набор чередующихся значений, которые чередуют одно значение tuple_b для каждых двух значений tuple_a. Предполагая, что tuple_a всегда вдвое больше tuple_b.

Например:

tuple_a = (1,3,5,7,9,11,13,15)
tuple_b = (2,4,6,8)

interleaved_tuple_two(tuple_a, tuple_b) вернется:

(1, 3, 2, 5, 7, 4, 9, 11, 6, 13, 15, 8)

В настоящее время у меня есть это, но это неправильно. Не слишком уверен, как улучшить это

def interleaved_tuple_two(tuple_a, tuple_b):
    return [val for pair in zip(tuple_a, tuple_b) for val in pair]

Для новичка я бы рекомендовал сделать простой цикл for по «диапазону (0, len (tuple_b))» и собрать нужные элементы с небольшим количеством индексной арифметики из кортежей.

Michael Butscher 21.03.2022 07:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать zip с тремя списками, первые два имеют tuple_a пропуск одного значения за раз, но имеют разные начальные позиции, а третий — tuple_b.

tuple_a = (1, 3, 5, 7, 9, 11, 13, 15)
tuple_b = (2, 4, 6, 8)

tuple_c = tuple(
    v
    for triple in zip(tuple_a[::2], tuple_a[1::2], tuple_b)
    for v in triple
)
print(tuple_c)

Другой вариант — использовать индекс и сопоставить его с соответствующим поиском:

tuple_c = tuple(
    v
    for i in range(len(tuple_b))
    for v in (tuple_a[i*2], tuple_a[i*2+1], tuple_b[i])
)

Вы также можете использовать itertools.chain, чтобы избежать понимания:

from itertools import chain

tuple_a = (1, 3, 5, 7, 9, 11, 13, 15)
tuple_b = (2, 4, 6, 8)

tuple_c = tuple(chain(*zip(tuple_a[::2], tuple_a[1::2], tuple_b)))
print(tuple_c)

Другие вопросы по теме