Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用列表理解的字符串操作_Python - Fatal编程技术网

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"))
通过选择此问题的最佳答案来帮助社区