Me gustaría hacer una lista de tuplas usando dos listas y una constante, de la siguiente manera, me gustaría generar ob de la manera más rápida posible. Necesito hacer unos cien mil de estos, así que el tiempo importa ...

En promedio, el tamaño A y B tienen una longitud de aproximadamente 1000

constant = 3
A = [1,2,3]
B = [0.1,0.2,0.3]
ob = [(3,1,0.1),(3,2,0.2),(3,3,0.3)]

Sé que zip (A, B) puede crear una lista de tuplas, pero necesito la constante al principio. Aquí está el código que estoy usando en ese momento, me preguntaba si hay una manera más rápida de hacer esto

ob = []
for i in xrange(len(A)):
    a = A[i]
    b = B[i]
    ob.append((constant,a,b))

print ob
3
user58925 14 sep. 2018 a las 14:58

3 respuestas

La mejor respuesta

Puede usar itertools.repeat :

from itertools import repeat

ob = list(zip(repeat(constant), A, B))
2
Peter Wood 14 sep. 2018 a las 12:04

Sugiero que la siguiente solución aún se base en zip() función incorporada, sin ninguna directiva de importación necesaria:

constant = 3
A = [1,2,3]
B = [0.1,0.2,0.3]

ob = list(zip([constant]*len(A), A ,B))

print(ob)  # [(3,1,0.1),(3,2,0.2),(3,3,0.3)]
2
Laurent H. 14 sep. 2018 a las 12:05

Use itertools.cycle

import itertools 
ob = list( zip( itertools.cycle([3]) , A , B ) )
1
napuzba 14 sep. 2018 a las 12:08