Ho una lista di alcuni elementi, ad es. [1, 2, 3, 4]
e un singolo oggetto, ad es. 'a'
. Voglio produrre un elenco di tuple con gli elementi dell'elenco nella prima posizione e il singolo oggetto nella seconda posizione: [(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a')]
.Python: elenco zip con un singolo elemento
ho potuto farlo con zip
in questo modo:
def zip_with_scalar(l, o): # l - the list; o - the object
return list(zip(l, [o] * len(l)))
Tuttavia, questo mi dà un senso di creazione e la lista inutile di ripetere elemento.
Un'altra possibilità è
def zip_with_scalar(l, o):
return [(i, o) for i in l]
che è molto pulito e divinatorio anzi, ma qui faccio il tutto "manualmente". In Haskell vorrei fare qualcosa di simile
zipWithScalar l o = zip l $ repeat o
C'è qualche funzione o trick built-in, sia per la zippare con scalare o per qualcosa che mi avrebbe permesso di usare zip ordinaria, vale a dire sorta-di lista infinita?
https://docs.python.org/3/library/itertools.html#itertools.repeat – jonrsharpe
Cosa jonrsharpe detto, ma anche probabilmente vuole riscriverlo come un generatore, piuttosto che una funzione regolare. – OmnipotentEntity
@OnnipotentEntity poichè l'OP sta usando 3.x possono semplicemente 'return zip (l, repeat (o))'; è un iteratore, non c'è bisogno di "cedere". – jonrsharpe