Compare two sets of strings and then return whole strings that are different in Python 3.4 -
i'm writing little api listening program, , i'm trying figure out when new has been published. i've figured out of it, i'm having problem on lastly step -- want print out new. can compare 2 lists of items sets , set of letters that's in right answer, can't seem actual strings print.
here's code wrote compare 2 lists (both new_revised_stuff , old_revised_stuff lists of strings, "bob likes eat breakfast @ http://bobsburgers.com" few dozen items per list).
new_stuff = set(new_revised_stuff) - set(old_revised_stuff).intersection(new_revised_stuff) which returns:
set('b','o','l'...) i can rid of 'set' notation writing:
list(new_stuff) but doesn't help. i'd print out "bob likes..." if that's new line.
i've tried:
new_stuff = [] in new_revised_stuff: b in old_revised_stuff: if != b: ''.join(a) new_stuff.append(a) which results in actual stack overflow, it's bad code.
if want bring together iterable of single characters string, ''.join(new_stuff). example:
>>> new_stuff = ['b','o','l'] >>> ''.join(new_stuff) 'bol' however, there 2 problems here, inherent in design:
sets hold unique elements. so, if string diffs"hello, bob", there's going 1 o , 1 l in set of diffs. sets arbitrarily ordered. so, if string diffs "bob likes", converting set , string 'k iboebls'. if either of problem (and suspect are), need rethink algorithm. can solve sec 1 using orderedset (there's recipe in collections docs), first 1 going more of problem.
so, how could this?
well, don't need new_revised_stuff set; if iterate on characters , maintain ones aren't in old_revised_stuff, long old_revised_stuff set, that's efficient intersecting 2 sets.
but making old_revised_stuff set eliminate duplicates there, don't think want. want "multiset". in python, best way represent counter.
so, think want (maybe) this:
old_string = ' eat breakfast @ http://bobsburgers.com' new_string = 'bob likes eat breakfast @ http://bobsburgers.com' old_chars = collections.counter(old_string) new_chars = [] ch in new_string: if old_chars[ch]: old_chars[ch] -= 1 else: new_chars.append(ch) new_string = ''.join(new_chars) python python-3.x set
No comments:
Post a Comment