Python - Intersectiing Strings
Solution 1:
Check for occurances the other way around to get the order under control, and don't emit characters you've already emitted:
def strIntersection(s1, s2):
out = ""for c in s1:
if c in s2 andnot c inout:
out += c
returnout
Sure you could re-write it to be a list comprehension, but I find this easier to understand.
For your test data, we get:
>>> strIntersection('asdfasdfasfd' , 'qazwsxedc')
'asd'
Solution 2:
You want a string consisting of the unique characters that are common to str1
and str2
, in the order they appear in str1
.
Uniqueness and commonality imply set operations: that is, we're looking for the set of characters that appear in both str1 and str2. A set is fundamentally unordered, but we can re-order the data by sorting the characters according to their "index" of first occurrence in str1
. Then it's a simple matter of creating a string from the sorted sequence.
Putting it all together, we get:
''.join(sorted(set(str1) & set(str2), key = str1.index))
Solution 3:
You can use python sets http://docs.python.org/library/stdtypes.html#set to do this, like so:
>>> set("asdfasdfasfd") & set("qazwsxedc")
set(['a', 's', 'd'])
Solution 4:
easiest is to use sets in python
>>> a='asdfasdfasfd'>>> b='qazwsxedc'>>> set(a).intersection(b)
set(['a', 's', 'd'])
Solution 5:
It looks like your current script should do it if you fix the typo on the fourth line:
str3 = str3.join(i for i in str1 if i in str2 not in str3)
should be
str3 = str3.join(i for i in str1 if i in str2 and i not in str3)
I wouldn't recommend using a set for this simpy because they don't guarantee order. Your script is also likely to be faster.
Post a Comment for "Python - Intersectiing Strings"