2024-04-20 14:00:09 发布
网友
我试图创建一个函数,它以字符串作为参数,返回相同的字符串,但在字符串中交替使用大写和小写字母。我知道一个较长的解决方案,但我提出了下面的解决方案,但它不起作用,我想知道为什么它不起作用
def myfunc(*args): return [b.lower() if a%2 else b.upper() for a,b in enumerate(args)]
上面的代码为我提供了一个完整的大写字符串作为输出,例如:
>>> myfunc('Hello') ['HELLO']
您需要解包args(*args),但这将返回一个列表,因此您也需要再次加入字符串
*args
return "".join([b.lower() if a%2 else b.upper() for a,b in enumerate(*args)])
如注释中所述,这仅在只有一个参数的情况下有效,如果没有,您可能希望将字符串连接在一起,其中一种方法是使用chain,然后将其传递给enumerate
from itertools import chain if len(args) > 1: single_arg = chain.from_iterable(args)
return "".join(b.lower() if a%2 else b.upper() for a,b in enumerate(chain.from_iterable(single_arg)))
好的,首先你的函数现在没有接受一个字符串,但是它可以接受几个变量(因为你把*放在参数前面),因此当你把参数"Hello"传递给它时,它实际上会得到一个元组对象,比如('Hello', )。因此,在for循环中,实际上是迭代该元组,而不是迭代字符串的字符
*
"Hello"
('Hello', )
如果您想获取字符串,只需删除*
def myfunc(args): return "".join([b.lower() if a%2 else b.upper() for a,b in enumerate(args)])
请注意,该操作返回的不是字符串,而是字符列表。"".join([])将列表中的字符连接成一个字符串,由""分隔(即无)
"".join([])
""
您需要解包args(
*args
),但这将返回一个列表,因此您也需要再次加入字符串如注释中所述,这仅在只有一个参数的情况下有效,如果没有,您可能希望将字符串连接在一起,其中一种方法是使用chain,然后将其传递给enumerate
好的,首先你的函数现在没有接受一个字符串,但是它可以接受几个变量(因为你把
*
放在参数前面),因此当你把参数"Hello"
传递给它时,它实际上会得到一个元组对象,比如('Hello', )
。因此,在for循环中,实际上是迭代该元组,而不是迭代字符串的字符如果您想获取字符串,只需删除
*
请注意,该操作返回的不是字符串,而是字符列表。
"".join([])
将列表中的字符连接成一个字符串,由""
分隔(即无)相关问题 更多 >
编程相关推荐