首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的small_words()和large_words()函数不工作

为什么我的small_words()和large_words()函数不工作
EN

Stack Overflow用户
提问于 2019-07-13 09:41:23
回答 2查看 42关注 0票数 0

我想要删除所有小于3个字符且大于7个字符的单词,但我的函数似乎不起作用

代码语言:javascript
复制
import random
import sys

word_list = ['zebra',  'memory', 'desktop', 'earthquake', 
'infinity','marker', 'chocolate', 'school', 'microwave', 
'microphone', 'battle','battery', 'gorilla', 'memory', 'calendar', 
'plant', 'pants', 'trophy','pollution', 'carpenter', 'son', 'join']

guess_word = []
secret_word = random.choice(word_list)
lenght_word = len(secret_word)
alphabet = 'abcdefghijklmnopqrstuvwxyz'
letter_storage = []

def main():
    small_words()
    large_words()

def small_words():
    global word_list
    for word in word_list:
        if len(word) <= 3:
            word_list.remove(word)

def large_words():
    global word_list
    for words in word_list:
        if len(words) > 7:
            word_list.remove(words)
EN

回答 2

Stack Overflow用户

发布于 2019-07-13 09:48:01

它不起作用,因为您在迭代时修改了列表,这几乎总是一个坏主意。这将导致每次您从循环中删除某些内容时,循环将跳过值。

在python中实现这一点的方法是使用列表理解。它足够简短,你实际上不需要一个函数:

代码语言:javascript
复制
word_list = [word for word in word_list if len(word) > 3 ]
word_list = [word for word in word_list if len(word) <= 7]

或者合二为一:

代码语言:javascript
复制
word_list = [word for word in word_list if 3 < len(word) <= 7]

另一种方法是使用filter()

票数 1
EN

Stack Overflow用户

发布于 2019-07-13 10:07:50

简短而甜蜜:

代码语言:javascript
复制
word_list = list(filter(lambda x: len(x) > 3 and len(x) <= 7, word_list))

使用filter方法,您可以将一个函数和一个序列作为参数,这将返回一个迭代器,只生成该函数返回True的序列中的项。在这个特定的例子中,因为您只需要长度严格大于3且不超过7的单词,所以可以定义一个lambda函数,该函数与filter方法一起完成这项工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57015532

复制
相关文章

相似问题

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