map()函数
map() 会根据提供的函数对指定序列做映射。
map 语法:map(function, iterable, ...)
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果希望把list的每个元素都作平方,就可以用map()函数:
因此,我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个计算:
def f(x):
return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
输出结果: [1, 4, 9, 10, 25, 36, 49, 64, 81]
值得注意的是: 当seq多于一个时,map可以并行(注意是并行)地对每个seq执行如下图所示的过程:
当数据很大时,map函数可以有很好的效率。
问题如下:
count = [ [小德,5], [阿迪,5], [冯斯特,3], [小德,2], [安安,4], [安安,9], [丁一,10], [小德,12], [胡勇,11]]
count中的小列表中 如:count[0][0] 表示人名 ,count[0][1] 表示对应人名的属性
那么如何将其中相同的人名去重,并将后面的属性值相加呢? 这时候我们可以用 set+map 方法 将count 去除重复的人名,并将属性值相加。
解决方法:
1.双重for循环方法,第一重循环 for t in count,第二重循环for i in newcount 。
若newcount 中没有找到与 t[0] 相同的名字则执行 newcount.append(t) ,
若newcount中有相同名字 ,则执行 i[1] = i[1] + t[1] 语句。
注意的是,若列表中的数据太大,此方法执行起来耗费时间极大,效率极低。因此方法不推荐使用,具体代码不在此展示。
2.使用set + map 函数去重。
我们先将count 中的人名放到一个列表中:
peoplename = []
for stu in count:
peoplename.append(stu[0])
此时peolename 里有重复的人名,去除重复的人名:
peoplename = list(set(peoplename))
定义如下函数
def f(x):
"""
:type x: str
"""
num = 0
for i in count: //遍历count 将相同的人名的属性值相加后赋给num
if i[0] == x:
num = num + i[1]
return [x, num] //返回一个列表,包含了人名和相加后的属性值
再使用map方法对peoplename 里每个人名使用f函数。
upcount = [] upcount = list(map(f, peoplename))
若有错误之处,欢迎各路大神指点。