map(func,iter)
lst_str = ["1", "2", "3"]
# 得到lst_num为[1, 2, 3]
lst_num = list(map(int, lst_str))
如果想把一个列表里的所有元素批量地调用某一个函数,并映射得到一个新的列表(原列表中元素相对位置不变),可以使用内置函数map(func, iter)。
map(func, iter)的含义是,对可迭代对象iter(通常是一个列表)里的所有元素都调用函数func,并得到一个新的map对象。如果我们对map对象的外部再调用list(),则可以得到一个新的列表。
上述过程,是将lst_str = [“1”, “2”, “3”]中的每一个元素即str类型的"1"、“2”、"3"都调用了函数int(),转化为int类型的的1、2、3。
实际上等价于
lst_str = ["1", "2", "3"]
lst_num = list()
for ch in lst_str:lst_num.append(int(ch))
# 得到lst_num为[1, 2, 3]
split(x)
字符串中的split(x)方法以字符串x为分割符,将原字符串分割为一个新的列表并返回,原字符串不发生改变。如果不传入参数x,则默认为按照空格" “进行分割。最常用的分隔符为空格” “或者逗号”,"。
s = "1 2 3 4 5"
lst = s.split()
# 等价于lst = s.split(" ")s = "1,2,3,4,5"
lst = s.split(",")# 两种分割均会得到lst = ["1", "2", "3", "4", "5"]
join(lst)
字符串中的join(lst)方法以原字符串为合并符,将列表lst合并为一个新的字符串并返回。
注意lst中的元素必须是字符串。最常用的合并符为空字符串"“、空格字符串” “、逗号”,"。
lst = ["a", "b", "c"]
s = "".join(lst)
# 会得到s = "abc"s_space = " ".join(lst)
# 会得到s_space = "a b c"s_star = "*".join(lst)
# 会得到s_star = "a*b*c"
字符串的分割与合并是一对相互对应的操作,常用于列表与字符串之间的相互转换。
注意:
- 字符串属于一种不可变数据类型,并不能直接进行修改操作。当题目要求对一个字符串进行修改时,通常会先将原字符串使用split()方法或list()转化成列表,对列表修改后再使用join()方法得到新字符串的方式来实现。
- 列表lst必须是一个字符串类型列表,即lst: List[str]。如果lst是一个整数类型列表,直接使用语句"".join(lst)会出现类型错误TypeError。如需进行合并操作,必须使用map()内置函数对lst中的元素进行类型转换,将lst中的所有int类型元素转换成str类型。即
lst = [0, 4, 2]
s = "".join(list(map(str, lst))) # 得到s = "042"
ACM输入输出流
在ACM模式中,我们通常会遇到用输入列表的情况,且列表中的各个元素用空格或者逗号隔开。
我们可以使用字符串的split()方法结合map()函数来实现输入。
输入字符串列表,可以这样写
# 输入形如"a b c"的字符串列表,用空格隔开
# 得到形如lst = ["a", "b", "c"]
lst = input().split()
输入数字列表,可以这样写
# 输入形如"1 2 3"的数字列表,用空格隔开
# input().split()会得到形如["1", "2", "3"]
# 得到形如lst = [1, 2, 3]
lst = list(map(int, input().split()))
在ACM模式中,列表的输出通常要求以字符串的形式输出,且用空格或逗号分隔开各个元素。
我们可以使用字符串的join()方法结合map()函数来实现输出。
输出字符串列表,可以这样写
# 输出形如"a b c"的字符串列表,用空格隔开
lst = ["a", "b", "c"]
ans = " ".join(lst)
print(ans)
输出数字列表,可以这样写
# 输出形如"1 2 3"的数字列表,用空格隔开
nums = [1, 2, 3]
ans = " ".join(list(map(str, nums)))
print(ans)