试图编写一个程序来检查列表中每个字符串的字符数

2024-04-18 18:49:33 发布

您现在位置:Python中文网/ 问答频道 /正文

def friend(x):
    new_name_list = []
    for each_name in x:
        name_count = 0
        for each_char in each_name:
            name_count += 1
        if name_count == 4:
            new_name_list.append(each_name)
    print(new_name_list)

我试图完成一个codewars问题,它是这样的:“制作一个程序,过滤一个字符串列表,并返回一个只有你朋友名字的列表

名称中必须有4个字母

例如:输入=[“Ryan”、“Kieran”、“Jason”、“Yous”]、输出=[“Ryan”、“Yous”]”

我已经创建了上面的程序,该程序在PyCharm中运行良好,并且适用于我测试它的每个列表。然而,当我用codewars检查它时,它总是给我一条错误消息。我不太确定我做错了什么,任何帮助都将不胜感激


Tags: namein程序friend列表newfordef
3条回答

学习python并尝试解决相同的问题。我写了下面的代码,想知道如何按照“我的逻辑”的方式前进

它似乎只将第一项添加到new_friends列表中,而不是迭代x列表的所有元素

除此之外,返回值是回馈>None。。。我没有注意到的是什么

def friend(x):
    x = ["Ryan", "Kieran", "Jason", "Yous"]
    new_friends = []
    for str in x:
        if len(str) == 4:
            return new_friends.append(str)
    return new_friends[0:]

我也尝试了嵌套的while循环,而不是if语句。。但是在new_friends列表中添加其他项目没有成功

非常感谢您的回答;)

您可以使用:

def friend(x):
    print(list(filter(lambda name: len(name)==4, x)))

def friend(x):
    names_to_print = []
    for name in x:
        if len(name) == 4:
            names_to_print.append(name)
    print(names_to_print)

如果只想返回,只需将print语句替换为return即可

也可以使用基本列表理解:

[name for name in Input if len(name)==4]

甚至可以使用itertools中的compress:

from itertools import compress
mask = [len(name)==4 for name in Input]
list(compress(Input,mask))

输出:

['Ryan', 'Yous']

相关问题 更多 >