Python程序打印字符串中偶数长度的单词
在Python编程语言中,长度是指计算字符串的整个范围,从字符串的第一个字符到最后一个字符。打印和计算字符串中的偶数长度是一个基本的编程练习。
在本教程中,我们将学习如何找到字符串中所有长度为偶数的单词。如果一个数字能被2整除,即余数为0,则认为它是偶数。这个属性应该适用于我们需要单词的长度。因此,程序的目标是只打印长度为偶数的单词,并跳过所有不满足上述属性的单词。
例如,如果我们有一个单词字符串“A big cube was found inside the box.”,对于这个字符串,我们的程序应该只打印单词:“cube”和“inside”,因为这些单词的长度分别为4和6。
方法
使用str.split()函数将字符串分割成单词。
遍历单词。
使用len()函数计算单词的长度。
如果长度为偶数,则打印单词。
否则什么也不做。
str.split()
这是适用于python字符串的内置函数。此函数的作用是根据指定的分割符(如果没有指定分割符,则为空格)分割字符串函数。
在Python解释器中,以下函数的帮助信息如下所示:
split(self, /, sep=None, maxsplit=-1) Return a list of the words in the string, using ‘sep’ as the delimiter string. sep The delimiter according which to split the string. None (the default value) means split according to any whitespace, and discard empty strings from the result. maxsplit Maximum number of splits to do. -1 (the default value) means no limit.
len()
Len是python中最常用的函数,用于计算python中任何数据对象的字符或元素数量。例如,对于字符串“aaa”,len(“aaa”)将返回3。
来自Python解释器的内置帮助:
len(obj, /) Return the number of items in a container. For a string, its wrapper str.__len__() is called.
示例
在下面的示例中,我们实现了上述方法。我们创建了一个函数,用于从字符串中过滤出所有长度为偶数的单词。
def printEvenLengthWords(s): # splitting the words in a given string words = s.split() # same as s.split(' ') for word in words: # checking the length of words if len(word) % 2 == 0: print(word) # input string sample = 'this is a test string' # calling the function printEvenLengthWords(sample)
输出
this is test string
一点Python额外内容
Python包含一个名为filter()的内置函数,它返回一个迭代器。
它接受两个参数,第一个是布尔函数,第二个是应该应用它的可迭代对象。我们可以将上述任何方法用作此函数。
使用filter()时必须特别注意,因为它是可以耗尽的,这意味着一旦它被用于遍历或转换为列表,如果再次遍历,它将返回None,因此最好将其转换为列表并存储在另一个变量中。
语法
evenWords = filter(lambda x: len(x) % 2 == 0, 'this is a test string'.split())
示例
def printEvenLengthWords(s): # splitting the words in a given string words = s.split() # same as s.split(' ') # checking the length of words evenWords = filter(lambda x: len(x) % 2 == 0, words) for word in evenWords: print(word) # calling the function with input string passed in directly printEvenLengthWords('this is a test string')
输出
this is test string
在上面的示例中,lambda函数’x’的参数代替了split函数返回的每个元素。它的作用很像for循环,但它是python的简写方式。
使用filter()和列表推导的Python单行代码
我们可以直接在filter对象上调用print(),并设置可选参数’sep’为’\n’或换行符。开头的’*’表示解包可迭代对象并打印所有内容,分隔符将它们在新行中打印出来。可以按如下方式进行。
使用Lambda
def printEvenLengthWords(s): # please note that one liners are hard to understand # and may be frowned upon in some cases print(*filter(lambda x: len(x) % 2 == 0, s.split()), sep='\n')
使用列表推导式
def printEvenLengthWords(s): print(*[x for x in s.split() if len(x) % 2 == 0], sep='\n') # input string sample = 'this is a test string' # calling the function printEvenLengthWords(sample)
输出
this is test string
注意
当使用带有以句点(.)结尾的多个语句的split()函数时,它也会与最后一个单词一起计数。
示例
x = 'Example statement 1. Some line 2.'
当将上述字符串传递给函数时,它还将包含“1.”和“2.”。
输出
1. Some line 2.
可以通过一个简单的技巧来解决这个问题。我们可以使用replace()调用删除所有句点,如下所示:
x = 'Example statement 1. Some line 2.' x = x.replace('.', '')
示例
def printEvenLengthWords(s): # handle full stops s = s.replace('.', '') # splitting the words in a given string words = s.split() # same as s.split(' ') for word in words: # checking the length of words if len(word) % 2 == 0: print(word) # input string sample = 'Example statement 1. Some line 2.' # calling the function printEvenLengthWords(sample)
输出
Some line
但是需要注意的是,它甚至会删除句子中间的句点,对于更强大的替代方案,可以使用正则表达式模式。
正则表达式模式
示例
\w\.(\s[A-Z])?
这检查是否有任何单词字符后跟一个句点,然后是字符串终止或新句子以大写字母开头。可以在其他教程中更深入地学习正则表达式。