使用列表理解的字符串操作

2024-03-29 12:47:08 发布

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

我正在尝试下面的代码并期望输出为, 匹配字符串,其中每个偶数字母都是大写,每个奇数字母都是小写,但是我的输出是所有大写字符的列表。你知道吗

def myfunc(*args):
    return ''.join([args[i].upper() if i%2==0 else args[i].lower() for i in range(len(args))])

如何获得预期的输出?我尝试了相同的列表理解语法来测试,效果很好。这个特定代码有什么问题?你知道吗


Tags: 字符串代码列表returndef字母argsmyfunc
3条回答

问题是,您使用的是var args。这是用一个列表包装传递的字符串,然后在该列表上迭代(该列表只包含一个字符串)。这意味着你的代码在某种程度上可以工作;它只是交替使用每个单词的大小写而不是每个字符。你知道吗

去掉var参数:

def myfunc(word):
    return ''.join([word[i].upper() if i%2==0 else word[i].lower() for i in range(len(word))])

print(myfunc("hello world"))
# HeLlo WoRlD

我要注意的是,有几种方法可以调试它。如果您检查了args的内容,就会发现当传递一个参数时它只包含一个元素,当传递两个参数时它只包含两个元素。如果你输入了两个参数,你也会注意到它把每个单词的大小写作为一个整体来交替。这可能会给你足够的线索让你弄明白。你知道吗

通过在函数声明中写入*args,这意味着您在迭代多个字符串,而不仅仅是一个字符串。例如:

myfunc('hello', 'goodbye')

函数将在hellogoodbye上迭代,hello的索引为0,这是偶数,因此将其字符转换为大写,而goodbye的索引为1,这是奇数,因此将其字符转换为小写:

HELLOgoodbye

如果只希望为一个字符串调用函数,则必须从*args中删除*或逐个插入字符串的字符:

myfunc('h','e','l','l','o')

因此,函数的声明和实现应该如下所示:

def myfunc(args):
    return ''.join([args[i].upper() if i%2==0 else args[i].lower() for i in range(len(args))])

调用myfunc('hello')将返回正确的结果。你知道吗

以上答案是正确的,但它们要求您修改当前语法。一般来说,你应该试着理解*args是如何工作的。
在python中,函数定义中的*args用于接收数量可变的参数。当我们事先不知道会通过多少个论点时,就会出现这种情况。
例如:

def myFun(*argv):
    for arg in argv:
        print (arg)
myFun('Hello', 'Welcome', 'to', 'GeeksforGeeks')

现在回到您的代码,您可以通过从args列表中选择第一个参数来运行它。见下文:

def myfunc(*args):
    return ''.join([args[0][i].upper() if i%2==0 else args[0][i].lower() for i in range(len(args[0]))])
print(myfunc("input"))

通过选择这个问题的最佳答案来帮助社区。你知道吗

相关问题 更多 >