Python - Intersectiing strings

耗尽温柔 提交于 2019-12-01 17:37:19

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 and not c in out:
      out += c
  return out

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'

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))

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'])

easiest is to use sets in python

>>> a='asdfasdfasfd'
>>> b='qazwsxedc'
>>> set(a).intersection(b)
set(['a', 's', 'd'])
def str_intersection(str1, str2):
    common_letters = set(str1) & set(str2)
    str3 = ''
    for c in str1:
        if (c in common_letters) and (c not in str3):
            str3 += c
    return str3

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!