Gerard Flanagan wrote: > John Salerno wrote: > > I'd like to compare the values in two different sets to test if any of > > the positions in either set share the same value (e.g., if the third > > element of each set is an 'a', then the test fails). > > > > I have this: > > > > def test_sets(original_set, trans_letters): > > for pair in zip(original_set, trans_letters): > > if pair[0] == pair[1]: > > return False > > return True > > > > > > zip() was the first thing I thought of, but I was wondering if there's > > some other way to do it, perhaps a builtin that actually does this kind > > of testing. > > > > Thanks. > > 'enumerate' is another possibility: > > s1 = 'abcd' > s2 = 'zzzz' > s3 = 'zbzz' > s4 = 'zzbz' > > def are_itemwise_different( L1, L2 ): > #if len(L1) != len(L2): return True > for idx, value in enumerate(L1): > if value == L2[idx]: > return False > return True > > #after Peter Otten > def are_itemwise_different( L1, L2 ): > return True not in ( val == L2[idx] for idx, val in enumerate(L1) ) > > assert are_itemwise_different(s1,s2) > assert not are_itemwise_different(s1,s3) > assert are_itemwise_different(s1,s4) >
s1 = 'abcd' s2 = 'zzzz' s3 = 'zbzz' s4 = 'zzbz' s5 = 'xbxx' def itemwise_intersect( L1, L2 ): return [value for idx, value in set(enumerate(L1)) & set(enumerate(L2))] assert itemwise_intersect(s1,s2) == [] assert itemwise_intersect(s1,s3) == ['b'] assert itemwise_intersect(s1,s4) == [] def itemwise_intersect( *args ): s = set(enumerate(args[0])) for t in ( set(enumerate(X)) for X in args[1:]): s.intersection_update(t) return [val for i,val in s] assert itemwise_intersect(s1,s3,s5) == ['b'] Gerard -- http://mail.python.org/mailman/listinfo/python-list