почтовый список с одним элементом

У меня есть список некоторых элементов, например, [1, 2, 3, 4] и один объект, например 'a'. Я хочу создать список кортежей с элементами списка в первой позиции и одним объектом во второй позиции: [(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a')].

Я мог бы сделать это с zip следующим образом:

def zip_with_scalar(l, o): # l - the list; o - the object
    return list(zip(l, [o] * len(l)))

Однако, это дает мне ощущение создания и ненужного списка повторяющихся элементов.

Другая возможность - это

def zip_with_scalar(l, o):
    return [(i, o) for i in l]

, которая действительно очень чистая и питоническая, но здесь я делаю все это «вручную». В Haskell я бы сделал что-то вроде

zipWithScalar l o = zip l $ repeat o

Есть ли какая-нибудь встроенная функция или трюк, либо для архивирования со скаляром, либо для чего-то, что позволило бы мне использовать обычный zip, то есть сортировку по бесконечному списку ?

18
задан Georgy 14 July 2019 в 10:50
поделиться