How to compare one element in a list with all other elements in this list, python

I have a list like this:

all = [[a,b,c,d],[r,d,g,s],[e,r,a,b],[p,o,i,u]....(more similar items)] 

I want the number of elements to be the same among them, so I need to compare all[0] with all[1],all[2]...all[(len(all)-1)] , and then use all[1] for comparison with all[2],all[3]...all[(len(all)-1)] , then all[2] for comparison with all[3],all[4],...all[(len(all)-1)]

I tried something like this:

  for i in range(len(all)): print len(all[i] & all[i+1]) ##how many identical items shared by all[0] and all[1] print len(all[i+1] & all[i+2]) 

but don’t know how to proceed. The result I want to get:

 item1 has 3 same values with item2, has 4 same values with item3, has 1 same values with item4.... item2 has 3 same values with item1, has 2 same values with item3, etc 
+8
python
source share
4 answers

The simplest algorithm here is n ^ 2. Just double your list:

 for x, left in enumerate(all): for y, right in enumerate(all): common = len(set(left) & set(right)) print "item%s has %s values in common with item%s"%(x, common, y) 
+4
source share

Kits are the way to go.,

 all = [[1,2,3,4],[1,2,5,6],[4,5,7,8],[1,8,3,4]] set_all = [set(i) for i in all] for i in range(len(all)): for j in range(len(all)): if i == j: continue ncom = len(set_all[i].intersection(set_all[j])) print "List set %s has %s elements in common with set %s" % (i, ncom, j) 

List set 0 has 2 elements in common with set 1 List set 0 has 1 elements in common with set 2 List set 0 has 3 elements in common with set 3 List set 1 has 2 elements in common with set 0 List set 1 has 1 elements in common with set 2 List set 1 has 1 elements in common with set 3 List set 2 has 1 elements in common with set 0 List set 2 has 1 elements in common with set 1 List set 2 has 2 elements in common with set 3 List set 3 has 3 elements in common with set 0 List set 3 has 1 elements in common with set 1 List set 3 has 2 elements in common with set 2

+2
source share

Basically what you want to do is count the length of the intersections of the set of elements in each list with each other's list. Try the following:

 a = [['a','b','c','d'],['r','d','g','s'],['e','r','a','b'],['p','o','i','u']] for i in range(len(a)): for j in range(len(a)): print "item%d has %d same values as item%d" % ( i, len(set(a[i]) & set(a[j])) ,j ) 

The output format is not exactly what you wanted, but you get this idea.

+1
source share

If you are looking for the shortest answer because you are a lazy font like me :)

 >>> my_list = [['a','b','c','d'],['r','d','g','s'],['e','r','a','b'],['p','o','i','u']] >>> for i, sub_list in enumerate(my_list): ... print 'item %d shares with %r'%(i, map(lambda a, b: len(set(a) & set(b)), sub_list, my_list)) ... item 0 shares with [1, 0, 0, 0] item 1 shares with [0, 1, 0, 0] item 2 shares with [0, 1, 1, 0] item 3 shares with [0, 0, 0, 1] 
0
source share

All Articles