Python - 交叉字符串

ban*_*ang 6 python string intersection

尝试编写一个带有两个字符串的for函数,并返回按它们在第一个字符串中出现的顺序相交的字符.

这是我试过的:

def strIntersection(str1, str2):
    for i in str1:
        str3 = ''
        str3 = str3.join(i for i in str1 if i in str2 not in str3)
    return str3

str1 = 'asdfasdfasfd'
str2 = 'qazwsxedc'

strIntersection(str1,str2)

=> 'asdasdasd'
Run Code Online (Sandbox Code Playgroud)

但是我只希望交叉字符出现一次并按照第一个字符串的顺序即出现.'ASD'

有人可以帮忙吗?

我在其他论坛上发现了一些类似的问题,但解决方案似乎都涉及列表,而我希望我的输出是一个字符串

Kar*_*tel 7

你想组成的独特文字是共同的一个字符串str1,并str2在它们出现的顺序str1.

唯一性和通用性意味着设置操作:也就是说,我们正在寻找出现在str1和str2中的字符集.一个集合基本上是无序的,但是我们可以通过根据它们在第一次出现的"索引"对字符进行排序来重新排序数据str1.然后,从排序序列创建字符串很简单.

总而言之,我们得到:

''.join(sorted(set(str1) & set(str2), key = str1.index))
Run Code Online (Sandbox Code Playgroud)


sup*_*een 6

您可以使用python集http://docs.python.org/library/stdtypes.html#set来执行此操作,如下所示:

>>> set("asdfasdfasfd") & set("qazwsxedc")
set(['a', 's', 'd'])
Run Code Online (Sandbox Code Playgroud)


unw*_*ind 6

检查是否出现以控制订单,并且不发出已经发出的字符:

def strIntersection(s1, s2):
  out = ""
  for c in s1:
    if c in s2 and not c in out:
      out += c
  return out
Run Code Online (Sandbox Code Playgroud)

当然你可以重新编写它作为列表理解,但我发现这更容易理解.

对于您的测试数据,我们得到:

>>> strIntersection('asdfasdfasfd' , 'qazwsxedc')
'asd'
Run Code Online (Sandbox Code Playgroud)