Python 使用列表理解的字符串操作
我正在尝试下面的代码,并希望输出为, 匹配字符串,其中每个偶数字母为大写,每个奇数字母为小写,但我的输出是所有大写字符的列表Python 使用列表理解的字符串操作,python,Python,我正在尝试下面的代码,并希望输出为, 匹配字符串,其中每个偶数字母为大写,每个奇数字母为小写,但我的输出是所有大写字符的列表 def myfunc(*args): return ''.join([args[i].upper() if i%2==0 else args[i].lower() for i in range(len(args))]) 如何获得预期的输出?我尝试了相同的列表理解语法进行测试,效果很好。此特定代码有什么问题?问题是,您使用的是var args。这是用列表包装传递的
def myfunc(*args):
return ''.join([args[i].upper() if i%2==0 else args[i].lower() for i in range(len(args))])
如何获得预期的输出?我尝试了相同的列表理解语法进行测试,效果很好。此特定代码有什么问题?问题是,您使用的是var args。这是用列表包装传递的字符串,然后迭代该列表(仅包含一个字符串)。这意味着您的代码在某种程度上确实有效;它只是交替使用整个单词的大小写,而不是每个字符 只需去掉var args:
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')
您的函数将迭代hello
和bye
,其中hello
的索引为0
,这是偶数,因此将其字符转换为大写,而bye
的索引为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"))
通过选择此问题的最佳答案来帮助社区