Python代码重复

时间:2015-03-06 11:13:43

标签: python repeat

我的代码中有很多重复,一个很好的例子就是当我做一个简单的检查,看看字符串的第一个字母是否是元音。我的代码如下:

if word[0] == 'a' or word[0] == 'e' or word[0] == 'i' or word[0] == 'o' or word[0] == 'u':
    print 'An', word
else:
    print 'A', word

这很好但是重复的数量让我觉得可以有一个简单的方法来缩短它,我只是不知道它。我也试过这段代码:

if word[0] == 'a' or 'e' or 'i' or 'o' or 'u':
    print 'An', word
else:
    print 'A', word

但是,无论起始字母如何,此代码都会为每个字返回True

所以,只是澄清一下。代码工作正常,功能齐全,我知道我可以将它定义为一个函数,只需使用它,但似乎可以很容易地缩短它,这些知识对多个项目都很有用。

3 个答案:

答案 0 :(得分:3)

使用in测试会员资格:

if word[0] in {"a","e","i","o","u"}

同样if word[0] == 'a' or 'e' or 'i' or 'o' or 'u'总是会评估为True,您基本上会检查if word[0] == "a"然后if bool("e"),对于任何非空字符串,它始终为True。

对于像你这样的小测试而言,这不是什么大问题,但是set查找是0(1)而不是0(n)对于列表,字符串等,所以这是一个更有效的解决方案处理更大的数据或多次重复查找。

您也可以将一个或多个字母传递给str.startswith

if word[0].startswith(("a","e","i","o","u")):

如果您想忽略大小写,请在信件上拨打word[0].lower()

答案 1 :(得分:2)

使用关键字in

对其进行测试
word = "hello"
vowels = frozenset("aeiou")

if word[0] in vowels:
    print "It's in!"
else:
    print "It's not."

请注意,您可以将元音包含在任何可迭代的内容中,setliststringdict,生成器功能或任何您喜欢的内容。
正如@MartijnPieters在评论中指出的那样,frozenset是最优化的方法。

答案 2 :(得分:1)

您可以尝试使用re模块。

if re.match(r'(?i)[aeiou]$', word[0]):

这将处理大写和小写元音。 (?i)称为不区分大小写的修饰符,它有助于执行不区分大小写的匹配。由于match函数尝试匹配开头的字符串,因此您不需要添加起始锚^。 {\ n}}匹配a或e或i或o或u的字符类。