Comparing two lists in Python

60,839

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)
Share:
60,839
Matthew
Author by

Matthew

Updated on July 28, 2022

Comments

  • Matthew
    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
    DSM almost 12 years
    You'd need to use zip(list_a, list_b), I think.
  • Matthew
    Matthew almost 12 years
    Could 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-
    Ry- almost 12 years
    ' '.join(set(john.split(' ')) & set(mary.split(' ')))
  • Matthew
    Matthew almost 12 years
    Is there anyway to preserve order?
  • liori
    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
    Matthew almost 12 years
    They'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
    Matthew almost 12 years
    I'd like to see it return ['b'].
  • Matthew
    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
    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
    Matthew almost 12 years
    I'm not following, how can I incorporate that into ' '.join([j for j, m in zip(john.split(), mary.split()) if j==m])?
  • Levon
    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 compare j==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 to zip. 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
    CosmicComputer almost 12 years
    Then yes, go with the set option put forth by other users.