如何检查两个字符串是否具有相同的字符?python

2024-09-24 22:27:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查两个字符串是否有相同的字符?

比如:
“aand”和“daan”=>;正确
“aafw”和“kaaw”=>;假的

这是我的代码:

def procedures(txt1, txt2):
    str1 = txt1.lower()
    str2 = txt2.lower()
    for i in str1:
        for j in str2:
            if i == j:
                str1.replace(i, "", 1)
                str2.replace(i, "", 1)
                print("did")
    if str1 == "" and str2 == "":
        return True
    else:
        return False

但是它为{}和{}返回{}

我做什么?


Tags: 字符串ingtforreturnif字符lower
3条回答

可以迭代python字符串,就像迭代列表/元组一样。一个简单的功能是:

def stringCompare(a, b):
    for i in a:
        if i not in b:
            return False
        
    return True

print(stringCompare("aand", "daan"))
>> True

print(stringCompare("aafw", "kaaw"))
>> False

print(stringCompare("alii", "liai"))
>> True

注意上述函数仅检查两个字符串中的所有字符是否相等。现在,为了检查出现的次数,可以使用collections作为:

from collections import Counter

def stringCompare2(a, b):
    # also compares the occurance
    occurance_dict_a = Counter(a)
    occurance_dict_b = Counter(b)
    
    return occurance_dict_a == occurance_dict_b

print(stringCompare2("abc", "aabc"))
>> False

print(stringCompare2("abc", "cba"))
>> True

这是一个众所周知的问题,有许多可能的解决办法。试试这个:

def procedures(txt1, txt2):
    return sorted(txt1) == sorted(txt2)

Str对象不可编辑。因此str.replace方法返回一个新字符串。您必须分配给str1str2结果。因此,您的代码现在必须如下所示:

def procedures(txt1, txt2):
    str1 = txt1.lower()
    str2 = txt2.lower()
    for i in str1:
        for j in str2:
            if i == j:
                str1 = str1.replace(i, "", 1)
                str2 = str2.replace(j, "", 1)
                print("did")
    if str1 == "" and str2 == "":
        return True
    else:
        return False

或者,您可以从原始字符串中创建字符列表并对其进行排序。所以如果 字符串具有相同的字符,它们将转换为相同的字符序列(列表)

def procedures(txt1, txt2):
    seq1 = list(txt1.lower())
    seq2 = list(txt2.lower())

    seq1.sort()
    seq2.sort()

    if seq1 == seq2:
        return True
    else:
        return False

相关问题 更多 >