Necesito unir dos listas en Python3, donde pueden existir duplicados, y para un conjunto de estos, la lista resultante contendrá hasta el máximo en ambas listas. Un ejemplo podría aclararlo:
[1,2,2,5]( some operator)[2,5,5,5,9]=[1,2,2,5,5,5,9]
¿Ideas?
3 respuestas
Puede usar la clase collections.Counter
:
>>> from collections import Counter
>>> combined = Counter([1,2,2,5]) | Counter([2,5,5,5,9])
>>> list(combined.elements())
[1, 2, 2, 5, 5, 5, 9]
Funciona como un conjunto múltiple (una colección desordenada donde cada elemento puede aparecer varias veces). El operador |
le ofrece la unión de los conjuntos múltiples, donde cada elemento aparece max (apariencias_en_contador1, apariencias_en_contador2) veces.
Esta clase se agregó en Python 2.7 y 3.1.
Convierta matrices a diccionarios con
a[key] = count
Cree un nuevo diccionario con las reglas
c[key] = a.get(key, 0) > b.get(key, 0) and a[key] or b[key]
. Debe iterar a través de ambas teclas en ay dictos.Expandir diccionario,
result += [value] * key
¿Por qué usar listas en primer lugar? Esa información me parece un dict:
[1,2,2,5] -> {1: 1, 2: 2, 5: 1}
[2,5,5,5,9] -> {2: 1, 5: 3, 9: 1}
Entonces es simple:
keys = set(a.keys()+b.keys())
vals = [max(a.get(n, 0), b.get(n, 0)) for n in keys]
d = dict(zip(keys, vals))
print d
Resultado:
{1: 1, 2: 2, 5: 3, 9: 1}
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.