两个字符串中的类似字符,返回Python中所有相似的字符(无重复字符)问题集问题

时间:2012-11-18 17:50:37

标签: python python-3.x

事先,我已经搜索过这个问题的解决方案,但似乎没有一个存在。所以我目前正试图通过在http://singpath.appspot.com上运行Python“Path”来自学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 names

我理解它是如何工作的问题是我必须同时返回一个包含所有比较的字符串。感谢'狼'对于角色列表的想法。

5 个答案:

答案 0 :(得分:4)

您可以通过将其转换为集合来获取任何字符串中的唯一字符。 您可以使用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

答案 1 :(得分:2)

您不会在每个循环上追加变量“send”,而是从头开始设置。我想你想改变一行

same = ''.join(i)

为:

same += i

答案 2 :(得分:1)

您可以先转换为char集,然后找到交集

str1 = 'apple'
str2 = 'orange'
print list(str1)

set1 = set(list(str1))
set2 = set(list(str2))
setout = set1 & set2

print setout
myres = ''.join(setout)
print myres

输出上述代码

kkiller-machine:Eclipse $ python unique.letter.py

['a', 'p', 'p', 'l', 'e']
set(['a', 'e'])
ae

答案 3 :(得分:0)

首先感谢帮助我解决问题的所有人!我输入的最终解决方案如下。它可能不是非常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

答案 4 :(得分:0)

试试这个:

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