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'
有人可以帮忙吗?
我在其他论坛上发现了一些类似的问题,但解决方案似乎都涉及列表,而我希望我的输出是一个字符串
你想组成的独特文字是共同的一个字符串str1,并str2在它们出现的顺序str1.
唯一性和通用性意味着设置操作:也就是说,我们正在寻找出现在str1和str2中的字符集.一个集合基本上是无序的,但是我们可以通过根据它们在第一次出现的"索引"对字符进行排序来重新排序数据str1.然后,从排序序列创建字符串很简单.
总而言之,我们得到:
''.join(sorted(set(str1) & set(str2), key = str1.index))
Run Code Online (Sandbox Code Playgroud)
您可以使用python集http://docs.python.org/library/stdtypes.html#set来执行此操作,如下所示:
>>> set("asdfasdfasfd") & set("qazwsxedc")
set(['a', 's', 'd'])
Run Code Online (Sandbox Code Playgroud)
检查是否出现以控制订单,并且不发出已经发出的字符:
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)