tamaño - sacar elementos de una lista python
Comparación de elementos comunes entre 2 listas (15)
1) Method1 guardando list1 es un diccionario y luego iterando cada elemento en list2
def findarrayhash(a,b):
h1={k:1 for k in a}
for val in b:
if val in h1:
print("common found",val)
del h1[val]
else:
print("different found",val)
for key in h1.iterkeys():
print ("different found",key)
Encontrando elementos comunes y diferentes:
2) Método 2 utilizando set
def findarrayset(a,b):
common = set(a)&set(b)
diff=set(a)^set(b)
print list(common)
print list(diff)
def common_elements(list1, list2):
"""
Return a list containing the elements which are in both list1 and list2
>>> common_elements([1,2,3,4,5,6], [3,5,7,9])
[3, 5]
>>> common_elements([''this'',''this'',''n'',''that''],[''this'',''not'',''that'',''that''])
[''this'', ''that'']
"""
for element in list1:
if element in list2:
return list(element)
Lo tengo hasta ahora, ¡pero parece que no puede hacerlo funcionar!
¿Algunas ideas?
Aquí hay un método de fuerza bruta que se me ocurrió. Ciertamente no es el más eficiente pero es algo.
El problema que encontré con algunas de las soluciones aquí es que, o bien no da elementos repetidos o no proporciona el número correcto de elementos cuando el orden de entrada es importante.
#finds common elements
def common(list1, list2):
result = []
intersect = list(set(list1).intersection(list2))
#using the intersection, find the min
count1 = 0
count2 = 0
for i in intersect:
for j in list1:
if i == j:
count1 += 1
for k in list2:
if i == k:
count2 += 1
minCount = min(count2,count1)
count1 = 0
count2 = 0
#append common factor that many times
for j in range(minCount):
result.append(i)
return result
Las respuestas anteriores trabajan para encontrar los elementos comunes únicos, pero fallarán en explicar los elementos repetidos en las listas. Si desea que los elementos comunes aparezcan en el mismo número que se encuentran en común en las listas, puede usar la siguiente frase:
l2, common = l2[:], [ e for e in l1 if e in l2 and (l2.pop(l2.index(e)) or True)]
La parte or True
solo es necesaria si espera que algún elemento se evalúe como False
.
Las soluciones sugeridas por SilentGhost y SilentGhost generalmente le dicen cómo se debe hacer de una manera pitónica, pero pensé que también podría beneficiarse al saber por qué su solución no funciona. El problema es que tan pronto como encuentra el primer elemento común en las dos listas, devuelve solo ese elemento. Su solución podría solucionarse creando una lista de result
y recopilando los elementos comunes en esa lista:
def common_elements(list1, list2):
result = []
for element in list1:
if element in list2:
result.append(element)
return result
Una versión aún más corta utilizando listas de comprensión:
def common_elements(list1, list2):
return [element for element in list1 if element in list2]
Sin embargo, como dije, esta es una forma muy ineficiente de hacer esto: los tipos de conjuntos incorporados de Python son mucho más eficientes a medida que se implementan en C internamente.
Puedes usar una lista de comprensión simple:
x=[1,2,3,4]
y=[3,4,5]
common = [i for i in x if i in y]
common: [3,4]
Set es otra forma en que podemos resolver esto.
a = [3,2,4]
b = [2,3,5]
set(a)&set(b)
{2, 3}
También puede usar conjuntos y obtener los puntos en común en una línea: reste el conjunto que contiene las diferencias de uno de los conjuntos.
A = [1,2,3,4]
B = [2,4,7,8]
commonalities = set(A) - (set(A) - set(B))
use set intersections, set (list1) y set (list2)
>>> def common_elements(list1, list2):
... return list(set(list1) & set(list2))
...
>>>
>>> common_elements([1,2,3,4,5,6], [3,5,7,9])
[3, 5]
>>>
>>> common_elements([''this'',''this'',''n'',''that''],[''this'',''not'',''that'',''that''])
[''this'', ''that'']
>>>
>>>
Tenga en cuenta que la lista de resultados puede ser diferente al orden con la lista original.
Hola, esta es mi propuesta (muy simple)
import random
i = [1,4,10,22,44,6,12] #first random list, could be change in the future
j = [1,4,10,8,15,14] #second random list, could be change in the future
for x in i:
if x in j: #for any item ''x'' from collection ''i'', find the same item in collection of ''j''
print(x) # print out the results
esta es mi propuesta, creo que es más fácil con conjuntos que con un bucle for
def unique_common_items(list1, list2):
"""Produce the set of *unique* common items in two lists.
return list(set(list1) & set(list2))
def common_member(a, b):
a_set = set(a)
b_set = set(b)
if (a_set & b_set):
print(a_set & b_set)
else:
print("No common elements")
a_list = range(1,10)
b_list = range(5, 25)
both = []
for i in b_list:
for j in a_list:
if i == j:
both.append(i)
f_list=[1,2,3,4,5] # First list
s_list=[3,4,5,6,7,8] # Second list
# An empty list stores the common elements present in both the list
common_elements=[]
for i in f_list:
# checking if each element of first list exists in second list
if i in s_list:
#if so add it in common elements list
common_elements.append(i)
print(common_elements)
list_1=range(0,100)
list_2=range(0,100,5)
final_list=[]
for i in list_1:
for j in list_2:
if i==j:
final_list.append(i)
print(set(final_list))
>>> list1 = [1,2,3,4,5,6]
>>> list2 = [3, 5, 7, 9]
>>> list(set(list1).intersection(list2))
[3, 5]