我想将map()应用于字符串列表,结果是另一个字符串列表。
以下代码似乎有一个小问题,导致其无法执行。有什么想法吗?
假设s是一些字符串列表。我定义
def swap(s):
for i in range(len(s)):
if s[i].islower()==True:
s[i]=s[i].upper()
else:
s[i]=s[i].lower()
return s
现在我要执行以下操作
print(list(map(swap,s)))
但是我得到一个错误。
如果输入为s = ['S','A','r','a'],我希望输出为['s','a','R','A'] < / p>
答案 0 :(得分:2)
map
将list
的每个元素发送到传递给它的函数。因此,基本上,您的swap
被每个元素调用4次。
def swap(ch):
print(ch)
if ch.isupper():
return ch.lower()
return ch.upper()
s = ['S', 'A', 'r', 'a']
print(list(map(swap, s)))
将输出:
S
A
r
a
['s', 'a', 'R', 'A']
答案 1 :(得分:1)
将swap
应用于s
时,该功能将应用于s
的每个元素。第一个调用是swap(s[0])
,依此类推。函数中参数s
的值是字符串,而不是列表。尝试通过s[i]=...
修改字符串是非法的,因为字符串是不可变的。
您的函数必须将字符串拆分为字符,然后将转换后的字符组合回字符串:
def swap(s):
return "".join(c.upper() if c.islower() else c.lower()
for c in s)
或者,更好的是,使用标准方法str.swapcase()
。