0

事先,我已经寻找了解决这个问题的方法,但似乎没有。因此,我目前正在尝试通过运行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'

如您所见,它只收集一个相似的字符。有什么建议么?我尝试了几种不同的方法,但我不确定从这里去哪里!请帮忙!

Ps 我从一个类似的问题中得到了列表的想法:Python Function to return a list of common letters in first and last names

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

4

5 回答 5

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
于 2012-11-18T18:10:30.773 回答
2

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

same = ''.join(i)

到:

same += i
于 2012-11-18T17:54:22.490 回答
1

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

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 机器:Eclipse$ python unique.letter.py

['a', 'p', 'p', 'l', 'e']
set(['a', 'e'])
ae
于 2012-11-18T18:05:43.087 回答
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
于 2012-11-18T18:13:47.160 回答
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
于 2012-11-18T18:16:25.020 回答