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

问题描述 投票:0回答:5

我已经提前寻找过这个问题的解决方案,但似乎不存在。所以我目前正在尝试通过运行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

我明白它是如何工作的,问题是我必须同时返回一个包含所有比较的字符串。感谢“狼”提供角色列表的想法。

python python-3.x
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

2
投票

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

same = ''.join(i)

至:

same += i

2
投票

可以先转换成字符集,然后求交集

str1 = 'apple'
str2 = 'orange'

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

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

打印:

printing object


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

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
© www.soinside.com 2019 - 2024. All rights reserved.