У меня есть список некоторых элементов, например. [1, 2, 3, 4]
и один объект, например. 'a'
. Я хочу создать список кортежей с элементами списка в первой позиции и единственным объектом во второй позиции: [(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a')]
.Python: zip-список с одним элементом
я мог бы сделать это с 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
Есть ли встроенные функции или трюк, либо для архивирования с скаляр или что-то, что позволило бы мне использовать обычный почтовый индекс, т.е. сортировки бесконечного списка?
https://docs.python.org/3/library/itertools.html#itertools.repeat – jonrsharpe
Что jonrsharpe сказал, но и вы, вероятно, хотите переписывайте это как генератор, а не как регулярную функцию. – OmnipotentEntity
@OmnipotentEntity, поскольку OP использует 3.x, они могут просто «возвращать zip (l, repeat (o))'; это итератор, не нужно «уступать». – jonrsharpe