Python使用set + map方法给多级列表中的下级列表中的元素去重合并

 

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))

若有错误之处,欢迎各路大神指点。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值