首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按单词长度筛选列表

按单词长度筛选列表
EN

Stack Overflow用户
提问于 2018-11-23 18:57:58
回答 5查看 4.7K关注 0票数 1

我试图筛选一个列表,其中有一个单词逐行,根据单词的长度(在4到8个字符之间)。因此,如果输入文件具有:

  • 你好
  • 沟通
  • be
  • 测试

输出文件是:

  • 你好
  • 测试

所以我有个密码:

代码语言:javascript
复制
dir = "lower.lst"
dict = open(dir, 'r').readlines()
f=open('dictionary','w')
for word in dict:
  if len(word)>=4 & len(word)<=8:
    f.write(word)
f.close()
print(len(dict))

print(f)

但是输出文件保留了所有的单词。顺便问一下,有没有更有效的方法来做到这一点?

EN

回答 5

Stack Overflow用户

发布于 2018-11-23 19:13:39

  • 使用with -语句自动关闭文件(即使遇到异常)。
  • Python中的&实际上只适用于位旋转,请使用and
  • 您实际上不需要and,因为比较可以被链接起来。(len(word)>=4 and len(word)<=8相当于4 <= len(word) <= 8)。
  • 在你的问题中,你使用.readlines(),这里我使用for line in fin:。无论哪种方式,产生的字符串都将以换行符结尾,因此您的长度度量将以1为结束。在取长度(len(line.strip()))之前,我通过剥行来纠正这一点。(编写的代码应该省略'be',但保留了'dog',因为它实际上是长度为4的'dog\n' )。
  • 你说你的代码保留了所有的单词。在我看来,您的代码应该可以省略'communication\n''be\n'。我可以想象,如果在文件中有额外的空格(由于有两个空格,'be\n'‘的长度为5),那么可能会保留'be \n。但是,在输出文件中保留'communication\n'似乎是不合理的。你可能想再确认一下它是否真的在那里。
代码语言:javascript
复制
with open('lower.lst', 'r') as fin, open('dictionary', 'w') as fout:
    for line in fin:
        if 4 <= len(line.strip()) <= 8:
            fout.write(line)
票数 3
EN

Stack Overflow用户

发布于 2018-11-23 19:02:52

这样做有不止一个选择。

  1. 使用filter()内置函数

检查文档这里

让我们假设您有一个名为data的字符串列表,那么:

代码语言:javascript
复制
data = ['hello', 'communication', 'be', 'dog', 'test']
filtered_list = filter(lambda x: len(x) > 4 and len(x) < 8, data)
print(filtered_list)

将返回:

代码语言:javascript
复制
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
>   
['hello']

您可以更改lambda函数以筛选不同的条件。过滤器将“捕获”返回True的每个元素。

  1. list-comprehension

这可能是实现这一目标的最短途径。只需要做:

代码语言:javascript
复制
filtered_list = [x for x in data if len(x) > 4 and len(x) < 8]
票数 2
EN

Stack Overflow用户

发布于 2018-11-23 19:03:24

列表理解允许您选择要从哪些元素构造列表。下面是一个实现示例:

代码语言:javascript
复制
s = """
hello
communication
be
dog
test
"""

lst = [elm for elm in s.split() if (len(elm) >= 4 and len(elm) <= 8)]

print(lst)

输出:

代码语言:javascript
复制
['hello', 'test']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53451761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档