Comparing two lists in Python
Solution 1
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']
Solution 2
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)
Solution 3
Intersect them as sets:
set(listA) & set(listB)
Solution 4
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)
Matthew
Updated on July 28, 2022Comments
-
Matthew almost 2 years
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'
-
DSM almost 12 yearsYou'd need to use
zip(list_a, list_b)
, I think. -
Matthew almost 12 yearsCould you give me a working example on how I could about using it with: john = 'I love yellow and green' mary = 'I love yellow and red' And return: 'I love yellow and'
-
Ry- almost 12 years
' '.join(set(john.split(' ')) & set(mary.split(' ')))
-
Matthew almost 12 yearsIs there anyway to preserve order?
-
liori almost 12 years@Matthew: what would you like this method to return in case of
['a', 'b', 'c']
and['c', 'b', 'd', 'a']
? -
Matthew almost 12 yearsThey're not the same length. I might have one list that has ['green'] and another that has ['red', 'yellow', 'green']And I'd need it to return ['green']
-
Matthew almost 12 yearsI'd like to see it return
['b']
. -
Matthew almost 12 years
' '.join([j for j, m in zip(john.split(), mary.split()) if j==m])
is exactly what I'm looking for! Now to look into seeing how you did it to learn myself! Thanks so much! How would I go about doing it to check a total of say.. 5 strings at the same time? -
Levon almost 12 years@Matthew You could extend this example to more lists, zip can handle more than two lists, e.g.,
for i,j,k in zip(aa, bb, cc): print i, j, k
.. if your problem ends up being more complex other solutions might exist (but that should be a different question/post) -
Matthew almost 12 yearsI'm not following, how can I incorporate that into
' '.join([j for j, m in zip(john.split(), mary.split()) if j==m])
? -
Levon almost 12 years@Matthew The solution I provided had 2 lists (based on your post and title of the post), so I use
j
,m
, and comparej==m
.. if you want to extend this to 3 lists you'll have to use more variables, more comparisons, and you'll have to provide a third list tozip
. It's a direct extension of this solution. If you aren't comfortable with zip etc, you may want to explore the command (and the solution for 2 lists provided above) interactively step by step in the Python shell and get a feel for how this works. -
CosmicComputer almost 12 yearsThen yes, go with the set option put forth by other users.