Python 如何创建在字符串具有唯一字符时返回True,否则返回False的函数

Python 如何创建在字符串具有唯一字符时返回True,否则返回False的函数,python,python-3.x,Python,Python 3.x,例如:“xwzfyfjvmehjnscfdvyosifv”应该返回False,因为它有几个“f”(以及其他重复的字符) 而“fnyqov”应返回True 我的问题是大部分时间我的代码都能工作,但是“xwzfyfjvmehjnscfdvyosifv”保持returnigTrue 大小写应该被视为相等,因此“woOman”应该返回False 这是我的密码: def is_isogram(string): string = string.lower() if string == "":

例如:
“xwzfyfjvmehjnscfdvyosifv”
应该返回
False
,因为它有几个
“f”
(以及其他重复的字符)

“fnyqov”
应返回True

我的问题是大部分时间我的代码都能工作,但是
“xwzfyfjvmehjnscfdvyosifv”
保持returnig
True

大小写应该被视为相等,因此
“woOman”
应该返回
False

这是我的密码:

def is_isogram(string):
    string = string.lower()
    if string == "":
        return True
    for i in string:
        if string.count(i) >= 2:
            return False
        elif is_repeated(string) == True:
            return False
        else: 
            return True

def is_repeated(string):
    last_letter = ""
    for i in string:
        if last_letter.lower() == i.lower():
            return True
            break
        last_letter = i
    return False

print(is_isogram("xwzfyfjvmehjnscfdvyosifv"))
试试这个

def func(string):
    if len(set(string.lower())) == len(string.lower()):
        return True
    else:
        return False
试试这个

def func(string):
    if len(set(string.lower())) == len(string.lower()):
        return True
    else:
        return False

您可以使用
设置

def unique(s):
    return len(set(s.lower())) == len(s)

set
将删除重复项,因此您可以将其长度与原始项进行比较。

您可以使用
set

def unique(s):
    return len(set(s.lower())) == len(s)
def is_unique(test):
    test = test.lower()
    for c in test:
        if test.count(c) != 1:
            return False
    return True

test1 = "xwzfyfjvmehjnscfdvyosifv"
test2 = "woOman"
test3 = "abcdefghijklmnop"

is_unique(test1)
>>>False
is_unique(test2)
>>>False
is_unique(test3)
>>>True
set
将删除重复项,因此您可以将其长度与原始项进行比较

def is_unique(test):
    test = test.lower()
    for c in test:
        if test.count(c) != 1:
            return False
    return True

test1 = "xwzfyfjvmehjnscfdvyosifv"
test2 = "woOman"
test3 = "abcdefghijklmnop"

is_unique(test1)
>>>False
is_unique(test2)
>>>False
is_unique(test3)
>>>True
或者使用set()

或者使用set()


如果len(设置(字符串))!=len(字符串):
。。。对于不区分大小写的集合构建,请使用
string.lower()
。感谢您的评论@zwer,我在函数开头使用string.lower()来处理该问题。我真的不明白如果len(set(string))=len(string):
fits以及它实际上如何解决我的问题。集合只能存储唯一的值,因此将字符串转换为集合将消除重复项-因此,如果存在任何重复项,其长度将不同于原始字符串的长度。我建议您阅读一些Python数据结构,特别是本例中的集合,以便更好地理解它。你们可以从开始。这么简单的问题要解决,我花了几个小时在那个里。。。非常感谢<代码>如果len(设置(字符串))!=len(字符串):
。。。对于不区分大小写的集合构建,请使用
string.lower()
。感谢您的评论@zwer,我在函数开头使用string.lower()来处理该问题。我真的不明白如果len(set(string))=len(string):fits以及它实际上如何解决我的问题。集合只能存储唯一的值,因此将字符串转换为集合将消除重复项-因此,如果存在任何重复项,其长度将不同于原始字符串的长度。我建议您阅读一些Python数据结构,特别是本例中的集合,以便更好地理解它。你们可以从开始。这么简单的问题要解决,我花了几个小时在那个里。。。谢谢!为什么整个
if。。否则
可以直接返回比较结果时播放,即
返回len(set(string))!=len(字符串)
?另外,不需要调用直接长度比较,因为它不会改变字符串的长度。这会得到OP想要的相反结果
xwzfyfjvmehjnscfdvyosifv
正在返回
True
fnyqov
正在返回
False
。应该是另一种方式around@zwer我这样写是为了让他更好地理解:“)为什么整个
如果。。否则
可以直接返回比较结果时播放,即
返回len(set(string))!=len(字符串)
?另外,不需要调用直接长度比较,因为它不会改变字符串的长度。这会得到OP想要的相反结果
xwzfyfjvmehjnscfdvyosifv
正在返回
True
fnyqov
正在返回
False
。应该是另一种方式around@zwer我这样写是为了让他更好地理解:“)需要将
len(set(s))
更改为
len(set(s.lower())
,因为“woOman”将返回true需要将
len(set(s))
更改为
len(set(s.lower())
为“woOman”将返回TrueNOTE:对于这样一个简单的任务,不要使用第一种方法-它的效率非常低(
O(n²)
)。注意:对于这样一个简单的任务,不要使用第一种方法-它的效率非常低(
O(n²)
)。