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”
保持returnigTrue
大小写应该被视为相等,因此“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²)
)。