映射应用于作用于字符串列表的函数

时间:2019-05-06 19:44:46

标签: python-3.x

我想将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>

2 个答案:

答案 0 :(得分:2)

maplist的每个元素发送到传递给它的函数。因此,基本上,您的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()