Comparing two lists in Python
Question:
So to give a rough example without any code written for it yet, I’m curious on how I would be able to figure out what both lists have in common.
Example:
listA = ['a', 'b', 'c']
listB = ['a', 'h', 'c']
I’d like to be able to return:
['a', 'c']
How so?
Possibly with variable strings like:
john = 'I love yellow and green'
mary = 'I love yellow and red'
And return:
'I love yellow and'
Answers:
Use set intersection for this:
list(set(listA) & set(listB))
gives:
['a', 'c']
Note that since we are dealing with sets this may not preserve order:
' '.join(list(set(john.split()) & set(mary.split())))
'I and love yellow'
using join()
to convert the resulting list into a string.
—
For your example/comment below, this will preserve order (inspired by comment from @DSM)
' '.join([j for j, m in zip(john.split(), mary.split()) if j==m])
'I love yellow and'
For a case where the list aren’t the same length, with the result as specified in the comment below:
aa = ['a', 'b', 'c']
bb = ['c', 'b', 'd', 'a']
[a for a, b in zip(aa, bb) if a==b]
['b']
If the two lists are the same length, you can do a side-by-side iteration, like so:
list_common = []
for a, b in zip(list_a, list_b):
if a == b:
list_common.append(a)
Intersect them as sets:
set(listA) & set(listB)
i think this is what u want ask me anything about it i will try to answer it
listA = ['a', 'b', 'c']
listB = ['a', 'h', 'c']
new1=[]
for a in listA:
if a in listB:
new1.append(a)
john = 'I love yellow and green'
mary = 'I love yellow and red'
j=john.split()
m=mary.split()
new2 = []
for a in j:
if a in m:
new2.append(a)
x = " ".join(new2)
print(x)
If order doesn’t matter, but you want to print out a nice diff:
def diff(a, b):
if len(set(a) - set(b)) > 0:
print(f"Items removed: {set(a) - set(b)}")
if len(set(b) - set(a)) > 0:
print(f"Items added: {set(b) - set(a)}")
if set(a) == set(b):
print(f"They are the same")
diff([1,2,3,4], [1,2,3])
# Items removed: {4}
diff([3,4], [1,2,3])
# Items removed: {4}
# Items added: {1, 2}
diff([], [1,2,3])
# Items added: {1, 2, 3}
diff([1,2,3], [1])
# Items removed: {2, 3}
listA = ['a', 'b', 'c']
listB = ['a', 'h', 'c']
diff(listA, listB)
# Items removed: {'b'}
# Items added: {'h'}
john = 'I love yellow and green'
mary = 'I love yellow and red'
diff(john, mary)
# Items removed: {'g'}
So to give a rough example without any code written for it yet, I’m curious on how I would be able to figure out what both lists have in common.
Example:
listA = ['a', 'b', 'c']
listB = ['a', 'h', 'c']
I’d like to be able to return:
['a', 'c']
How so?
Possibly with variable strings like:
john = 'I love yellow and green'
mary = 'I love yellow and red'
And return:
'I love yellow and'
Use set intersection for this:
list(set(listA) & set(listB))
gives:
['a', 'c']
Note that since we are dealing with sets this may not preserve order:
' '.join(list(set(john.split()) & set(mary.split())))
'I and love yellow'
using join()
to convert the resulting list into a string.
—
For your example/comment below, this will preserve order (inspired by comment from @DSM)
' '.join([j for j, m in zip(john.split(), mary.split()) if j==m])
'I love yellow and'
For a case where the list aren’t the same length, with the result as specified in the comment below:
aa = ['a', 'b', 'c']
bb = ['c', 'b', 'd', 'a']
[a for a, b in zip(aa, bb) if a==b]
['b']
If the two lists are the same length, you can do a side-by-side iteration, like so:
list_common = []
for a, b in zip(list_a, list_b):
if a == b:
list_common.append(a)
Intersect them as sets:
set(listA) & set(listB)
i think this is what u want ask me anything about it i will try to answer it
listA = ['a', 'b', 'c']
listB = ['a', 'h', 'c']
new1=[]
for a in listA:
if a in listB:
new1.append(a)
john = 'I love yellow and green'
mary = 'I love yellow and red'
j=john.split()
m=mary.split()
new2 = []
for a in j:
if a in m:
new2.append(a)
x = " ".join(new2)
print(x)
If order doesn’t matter, but you want to print out a nice diff:
def diff(a, b):
if len(set(a) - set(b)) > 0:
print(f"Items removed: {set(a) - set(b)}")
if len(set(b) - set(a)) > 0:
print(f"Items added: {set(b) - set(a)}")
if set(a) == set(b):
print(f"They are the same")
diff([1,2,3,4], [1,2,3])
# Items removed: {4}
diff([3,4], [1,2,3])
# Items removed: {4}
# Items added: {1, 2}
diff([], [1,2,3])
# Items added: {1, 2, 3}
diff([1,2,3], [1])
# Items removed: {2, 3}
listA = ['a', 'b', 'c']
listB = ['a', 'h', 'c']
diff(listA, listB)
# Items removed: {'b'}
# Items added: {'h'}
john = 'I love yellow and green'
mary = 'I love yellow and red'
diff(john, mary)
# Items removed: {'g'}