Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从文本文档中选择最大长度相等的单词_Python_String_Maxlength - Fatal编程技术网

Python 如何从文本文档中选择最大长度相等的单词

Python 如何从文本文档中选择最大长度相等的单词,python,string,maxlength,Python,String,Maxlength,我正在尝试编写一个程序来读取文本文档并输出文档中最长的单词。如果有多个最长的单词(即,所有长度相等),那么我需要按照它们出现的相同顺序输出它们。例如,如果最长的单词是dog和cat,则代码应生成: 狗猫 我很难找到如何选择大量长度相等的单词并打印出来。就我所知,我正在努力思考如何选择最大长度相等的所有单词: 打开文件进行读取 fh = open('poem.txt', 'r') longestlist = [] longestword = '' for line in fh:

我正在尝试编写一个程序来读取文本文档并输出文档中最长的单词。如果有多个最长的单词(即,所有长度相等),那么我需要按照它们出现的相同顺序输出它们。例如,如果最长的单词是dog和cat,则代码应生成:

狗猫

我很难找到如何选择大量长度相等的单词并打印出来。就我所知,我正在努力思考如何选择最大长度相等的所有单词:

打开文件进行读取

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
-MLP

TLDR 显示名为
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