我已经提前寻找过这个问题的解决方案,但似乎不存在。所以我目前正在尝试通过运行http://singpath.appspot.com上的Python“路径”来自学Python,但我遇到了一个我不明白如何解决的问题。我尝试了多种不同的方法来解决它,但不断得出不同的错误结果。任何提示/帮助都会非常精彩!预先感谢!
问题:
比较字符串
创建一个接受两个字符串输入的函数 并返回一个包含出现的所有字符的字符串 在两个输入中。结果不应有任何重复 应按排序顺序列出。 您可能想使用 字符串模块中的变量小写,以便您拥有所有 字母按顺序排列。
我当前的代码:
def in_both(s1, s2):
s1 = s1.lower()
s2 = s2.lower()
l1=list(''.join(s1.split()))
l2=list(''.join(s2.split()))
same = ''
for i in l1:
if i in l2:
same = ''.join(i)
return same
示例:
call: in_both('apple','orange') recieved: 'e' expected: 'ae'
如您所见,它只收集一个相似的角色。有什么建议吗?我尝试了几种不同的方法,但我不确定从这里该去哪里!请帮忙!
P.s.我从这里的一个类似问题中得到了列表的想法:Python Function to return a list of common letters in first and last name
我明白它是如何工作的,问题是我必须同时返回一个包含所有比较的字符串。感谢“狼”提供角色列表的想法。
您可以通过将任何字符串转换为集合来获取其中的唯一字符。 您可以使用
intersection
获得两个集合的交集。
您可以对结果进行排序,这会返回一个列表。
def in_both(s1, s2):
s1 = s1.lower()
s2 = s2.lower()
s1_chars = set(s1)
s2_chars = set(s2)
result = sorted(s1_chars.intersection(s2_chars))
return result
您不必在每个循环上附加到变量“send”,而是从头开始设置它。我想你想改变路线
same = ''.join(i)
至:
same += i
首先感谢所有帮助我解决问题的人!我输入的最终解决方案如下。它可能不是很Pythonic,但它完成了工作:)如果我稍后有时间,我会回来重新审视解决方案!不管怎样,谢谢你的建议!
代码:
def in_both(s1, s2):
s1 = s1.lower()
s2 = s2.lower()
l1=list(''.join(s1.split()))
l2=list(''.join(s2.split()))
same = []
for i in l1:
if i in l2:
if i not in same:
same += i
same = sorted(same)
same = ''.join(same)
return same
试试这个:
def in_both(s1,s2):
l1 =[]
l2 = []
l1= list(s1.lower())
l2= list(s2.lower())
s = [i for i in l1 if i in l2]
same = list(set(''.join(s)))
return same