测试字符串是否由所有小写字母组成,没有重复的字母

时间:2014-07-18 10:48:44

标签: python string python-2.7

我想弄清楚为什么以下代码不起作用。 代码对我来说似乎是对的,但它总是返回True。

import string
lower_alpha = string.ascii_lowercase
def no_repeat_loweralpha_1 (string):
    for i in range(len(string)):
        if not string[i] in lower_alpha: return False
        if string[i] in string[:i]: return False
        else: return True
string = 'ab/!34cda56aaa1..,efgahijk'
print no_repeat_loweralpha_1(string)
# OUTPUT: True

以下是具有相同问题的代码的另一种变体:

def no_repeat_loweralpha_2(string):
    for i in range(len(string)):
        if string[i] < 'a' or string[i] > 'z' : return False
        if string[i] in string[:i]: return False
        else: return True
string = 'ab/!34cda56aaa1..,efgahijk'
print no_repeat_loweralpha_2 (string)
# OUTPUT: True

修改

是否有更短的方法来编写实现此功能的函数?如何使用lambda编写函数?

4 个答案:

答案 0 :(得分:1)

更加pythonic的版本应该是这样的:

return s.isalpha() and s.islower() and len(s) == len(set(s))

答案 1 :(得分:0)

这是另一种方法。收集所有独特的小写字母,并根据原始字母检查长度:

def no_repeat_lower_alpha(foo):
   s = set()
   for i in foo:
      if i.islower():
          s.add(i)
   return len(s) == len(foo)

答案 2 :(得分:0)

尝试以下代码

def lower_and_duplicate(str_test):
    dict_found_chars = {}
    for char in str_test:

        if not char.islower():
            return False

        if dict_found_chars.has_key(char):
            return False
        else:
            dict_found_chars[char] = 1

    return True

print lower_and_duplicate("aAsdfsdfsdf")
print lower_and_duplicate("aasdfsdfsdf")
print lower_and_duplicate("abcdefgh")

dict检查重复项,我们在每一步测试小写

答案 3 :(得分:-1)

更短的版本:

all(x in lower_alpha  and s.count(x) < 2 for x in s)

如果任何字符不是小写字母或计数是> 1它将返回False

您可以使用以下命令删除字符串导入:

all( x.isalpha() and x.islower() and s.count(x) < 2 for x in s)