Python 如何从文本文档中选择最大长度相等的单词
我正在尝试编写一个程序来读取文本文档并输出文档中最长的单词。如果有多个最长的单词(即,所有长度相等),那么我需要按照它们出现的相同顺序输出它们。例如,如果最长的单词是dog和cat,则代码应生成: 狗猫 我很难找到如何选择大量长度相等的单词并打印出来。就我所知,我正在努力思考如何选择最大长度相等的所有单词: 打开文件进行读取Python 如何从文本文档中选择最大长度相等的单词,python,string,maxlength,Python,String,Maxlength,我正在尝试编写一个程序来读取文本文档并输出文档中最长的单词。如果有多个最长的单词(即,所有长度相等),那么我需要按照它们出现的相同顺序输出它们。例如,如果最长的单词是dog和cat,则代码应生成: 狗猫 我很难找到如何选择大量长度相等的单词并打印出来。就我所知,我正在努力思考如何选择最大长度相等的所有单词: 打开文件进行读取 fh = open('poem.txt', 'r') longestlist = [] longestword = '' for line in fh:
fh = open('poem.txt', 'r')
longestlist = []
longestword = ''
for line in fh:
words = (line.strip().split(' '))
for word in words:
word = ''.join(c for c in word if c.isalpha())
if len(word) > (longestword):
longest.append(word)
for i in longestlist:
print i
你需要做的是把你迄今为止看到的所有最长的单词都列出来,并保持最长的长度。例如,如果到目前为止最长的单词长度为5,那么您将有一个包含5个字符的所有单词的列表。一旦您看到一个包含6个或更多字符的单词,您将清除该列表,并仅将该单词放入其中,同时更新最长长度。如果你访问了与最长单词长度相同的单词,你应该将它们添加到列表中
另外,我没有把代码放在你可以自己做的地方。好的,首先,你可能应该用一个
和
作为
语句,它只是简化了事情,确保你不会搞砸。所以
fh=open('poem.txt','r')
变成
打开('poem.txt','r')作为文件:
既然你只关心文字,你最好从一开始就使用内置的:
words = file.read().split()
然后您只需设置一个最大字长的计数器(初始化为0)和一个空列表。如果单词已超出最大长度,请设置新的maxlength并重写列表以仅包含该单词。如果它等于maxlength,请将其包含在列表中。然后把名单打印出来。如果您想包括一些检查,如.isalpha()
,请将其放在代码的相关部分
maxlength = 0
longestlist = []
for word in words:
if len(word) > maxlength:
maxlength = len(word)
longestlist = [word]
elif len(word) == maxlength:
longestlist.append(word)
for item in longestlist:
print item
-MLPTLDR
显示名为poem.txt的文件的结果,该文件的内容为:
狗被猫牵着走了
打开('poem.txt',r')作为文件的>>:
... words=file.read().split()
...
>>>[如果len(this_word)==len(max(words,key=len)),则用单词表示该单词]
[‘狗’、‘猫’]
解释
通过使用.read.split()
返回一个列表
对象,以及Python的max
函数可以接受一个函数(如关键字参数键
),您还可以使用列表理解来查找多个最长的单词,从而加快搜索速度
让我们澄清一下。首先,我将用您提到的示例属性创建一个文件
例如,如果最长的单词是dog和cat,则代码应生成:
狗猫
{如果在Windows上-这里我专门使用cmd
}
>echo a dog is by a cat to go hi > poem.txt
{如果在*NIX系统上-这里我专门使用bash
}
$echo“狗被猫牵着走”>poem.txt
让我们看看.read.split()
调用的结果。让我们按照@MLP的建议,使用open的<代码>作为
语句
{Windows}
>python
或者可能(例如,使用conda
)
{*NIX}
$python3
从这里开始,一切都一样
打开('poem.txt',r')作为文件的>>:
... words=file.read().split()
...
>>>打字(字)
从
最大值(iterable,*[键,默认值])
最大值(arg1,arg2,*args[,键])
返回iterable中最大的项或两个或多个参数中最大的一个
如果提供了一个位置参数,则该参数应为iterable。返回iterable中最大的项。如果提供了两个或多个位置参数,则返回最大的位置参数
有两个可选的纯关键字参数。键参数指定一个单参数排序函数,类似于用于list.sort()
的函数。如果提供的iterable为空,则默认参数指定要返回的对象。如果iterable为空且未提供默认值,则会引发ValueError
如果多个项是最大的,则函数返回遇到的第一个项。这与其他保持排序稳定性的工具一致,如sorted(iterable,key=keyfunc,reverse=True)[0]
和heapq.nlargest(1,iterable,key=keyfunc
)
版本3.4中新增:默认的仅关键字参数
在版本3.8中更改:密钥可以为None
让我们使用一种快速、不那么健壮的方法来查看我们是否满足iterable需求(提供了多种其他方法)
hasattr(单词“iter”)
真的
有了这些知识,并记住警告:“如果多个项是最大的,函数将返回遇到的第一个项。”我们可以着手解决这个问题。我们将使用len
功能(如果您想了解更多信息,请使用>>帮助(len)
)
>>最大值(单词,关键字=len)
“狗”
不太好。我们只知道这个词。现在,是时候使用列表理解来查找所有具有该长度的单词了。首先要弄到那个长度
>>max\u word\u length=len(max(words,key=len))
>>>最大字长
3.
现在轮到踢球的人了
>>>[如果len(this_word)==len(max(words,key=len)),则此单词表示此单词的大写字母]
[‘狗’、‘猫’]
或者,使用以前的命令,让事情更具可读性
>>>[如果len(this\u word)=max\u word\u length,则此词表示此词的大写字母]
[‘狗’、‘猫’]
如果您不想要列表格式,也就是说,如果您确实想要,您可以使用各种方法
dog cat
但是我得走了,所以我会把它留在原处。最长的单词不应该是整数吗?而且每次你发现一个较长的单词时,你都需要更新它。想想你的检查:如果长度相等,
>py