Skip to content Skip to sidebar Skip to footer

Python - Intersectiing Strings

Trying to write a for function that takes two strings and returns the characters that intersect in the order that they appear in the first string. Here's what I tried: def strInter

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"