美文网首页
列表排序/去重

列表排序/去重

作者: 鬼泣_89b6 | 来源:发表于2019-03-10 18:04 被阅读0次

要求

1.正数在前负数在后
2.整数从小到大
3.负数从大到小

示例:
排序前[7, -8, 5, 4, 0, -2, -5]
排序后[0, 4, 5, 7, -2, -5, -8]
补全代码:
  sorted(lst , key= lambda x: ____ )

详解:

>>> items = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
>>> sorted(items)
[(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')]

默认情况下内置的sort和sorted函数接收的参数是元组时,他将会先按元组的第一个元素进行排序再按第二个元素进行排序。 然而,注意到结果中(0, 'B’)在(0, 'a')的前面。这是因为大写字母B的ASCII编码比a小。然而,假设你想要一些更人性的排序并且不关注大小写。你或许会这么做:

>>> sorted(items, key=str.lower)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'lower' requires a 'str' object but received a 'tuple'

元组中第一项是数字,不能使用lower这个方法;错误的原因提示的很明显了,是因为你传递的是一个元组,而元组是没有lower这个方法的

sorted(items, key=lambda x: x.lower() if isinstance(x, str) else x) 
先判断一下是不是 str 如果不是 直接处理

但这样太麻烦了,别忘了,lambda 是一个函数,当返回值多于1项的时候,就会形成一个元祖

lambda 的正确用法:输入一个元祖,返回的元祖让字符串全部小写
>>> sorted(items, key=lambda x: (x[0], x[1].lower()))
[(0, 'a'), (0, 'B'), (1, 'A'), (1, 'B'), (2, 'A')]

我确信你知道你可以倒序排列,仅仅使用sorted(items, reverse=True, …),但是你怎么根据关键字来进行不同的排序?

使用lambda函数返回元组的技巧,下面是一个我们排序一个稍微高级的数据结构:

>>> peeps = [{'name': 'Ted', 'salary': 500}, {'name': 'Bill', 'salary': 1000}, {'name': 'Bill', 'salary': 500}]

现在,使用lambda函数返回一个元组的特性来排序:

>>> sorted(peeps, key=lambda x: (x['name'], x['salary']))
[{'name': 'Bill', 'salary': 500}, {'name': 'Bill', 'salary': 1000}, {'name': 'Ted', 'salary': 500}]

很有意思,对吧?Bill 在Ted的前面,并且500在1000的前面。但是如何在相同的 name 下,对 salary 反向排序?很简单,对它取反:

>>> sorted(peeps, key=lambda x: (x['name'], -x['salary']))
[{'salary': 1000, 'name': 'Bill'}, {'salary': 500, 'name': 'Bill'}, {'salary': 500, 'name': 'Ted'}]
当然这也可以进行简写
>>> sorted(peeps, key=lambda x:  -x['salary'])
这有同样的效果

删除列表里的重复值

参考 https://blog.csdn.net/yang9520/article/details/79569910

  • 方法1:无法保持顺序

使用set函数,s=set(list),然后再list(s).

  • 方法2:使用字典函数: 保持顺序
   a=[1,2,4,2,4,5,6,5,7,8,9,0]
     b={}
     b=b.fromkeys(a)
     c=list(b.keys())
     print('去重后的list为:',c)
  • 方法3:append 保持顺序
def delList(L):
    L1 = []
    for i in L:
        if i not in L1:
            L1.append(i)
    return L1    
 
print(delList([1,2,2,3,3,4,5]))
print(delList([1,8,8,3,9,3,3,3,3,3,6,3]))
  • 方法4:count,remove
def delList(L):
    for i in L:
        if L.count(i) != 1:
            for x in range((L.count(i)-1)):
                L.remove(i) 
    return L
 
print(delList([1,2,2,3,3,4,5]))
print(delList([1,8,8,3,9,3,3,3,3,3,6,3]))
  • 方法5:
a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a.sort()
last=a[-1]
for i in range(len(a)-2,-1,-1):
    if last==a[i]:
        del a[i]
    else:
        last=a[i]
 
print(a)

相关文章

  • 列表排序/去重

    要求 1.正数在前负数在后2.整数从小到大3.负数从大到小 详解: 默认情况下内置的sort和sorted函数接收...

  • 【python】常用小函数汇总

    1. 字典列表,按字典某个键值去重 2. 字典列表,按字典某个键值排序

  • leetcode15 三数之和

    这个题的关键在于去重,想要去重,最先想到的就是对数组或列表排序,排序后,依次以列表中的每个元素为起始值,查找后面的...

  • 笔试题分析(一)

    1、合并两个列表并加以排序和去重 思路:去重可借助集合或循环实现,排序利用list.sort实现 2、n的阶层实现...

  • Python语言的12个基础知识点小结

    python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序、去重、字典排序、字典、列表...

  • 数组排序去重

    冒泡排序 sort排序 数组去重

  • R语言-09去重和排序

    去重和排序

  • [python]set去重后按照原列表排序

    参考:https://www.cnblogs.com/quietwalk/p/9203471.html[https...

  • 11-15

    li.sort()排序li.unique() 去重 ,排序之后才,可以去重(只去除相邻的重复...) ...

  • Python 列表去重

    1、去重不保持原来的顺序: 2、去重保持原顺序(reduce): 3、list元素是字典,去重

网友评论

      本文标题:列表排序/去重

      本文链接:https://www.haomeiwen.com/subject/mncppqtx.html