去重及排序-Python

去重

set ()函数 ,无序集合,使用set去重返回的是新的集合对象。
对于l列表来说,使用set了之后返回的是无序集合,如果需要返回的是list,需要使用list()做一次类型转换。
当列表里面的数值为数字时,使用set()函数会进行排序,若为字符,则不会排序,且每次运行返回的顺序都不一样,即set()函数的无序性。

List1 = [1,3,2,2,1]
print(set(List1))
>>> {1, 2, 3}

print(list(set(List1)))
>>> [1, 2, 3]
List2 = ['b','a','s','a','b']
print(set(List2))
>>> {'b', 's', 'a'}

print(list(set(List2)))
>>> ['b', 's', 'a']
List3 = ['1','3','2','2','1']
print(set(List3))
>>> {'2', '3', '1'}

print(list(set(List3)))
>>> ['2', '3', '1']
List4 = [1,'a',3,2,'b',5,'s','a','b',2,1]
print(set(List4))
>>> {1, 2, 3, 5, 's', 'b', 'a'}
print(list(set(List4)))
>>> [1, 2, 3, 5, 's', 'b', 'a']

对于字符串类型来说,使用set了之后返回的是无序集合,如果需要返回的是字符串,需要使用’’.join()做一次类型转换。

s = 'a2311ssfdf'
print(set(s))
>>> {'1', 'd', '3', 'a', 's', '2', 'f'}

print(''.join(set(s)))
>>> 1d3as2f

此外,set()函数还可以进行交并差的运算

a = 'cookie'
b = 'google'
print(set(a),set(b))
>>> {'k', 'c', 'o', 'e', 'i'} {'l', 'g', 'e', 'o'}
# 交集
print(set(a)&set(b)) 
>>> {'o', 'e'}
# 并集
print(set(a)|set(b)) 
>>> {'g', 'k', 'c', 'o', 'l', 'e', 'i'}
# 差集
print(set(a)-set(b)) 
>>> {'c', 'i', 'k'}

排序

sort()和sorted()
sort()是应用在列表上的排序,sorted()可以对所有可迭代的对象进行排序操作。
列表的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的列表,而不是在原来的基础上进行的操作。

List1 = ['d','c','e','a']
List1.sort()
print(List1)
>>> ['a', 'c', 'd', 'e']

 # sorted会保留原列表
List1 = ['d','c','e','a']
List2 = sorted(List1)
print(List1)
>>> ['d', 'c', 'e', 'a']
print(List2)
>>> ['a', 'c', 'd', 'e']

# sorted返回的是列表
s = 'dcea'
print(sorted(s))
>>> ['a', 'c', 'd', 'e']

sort()语法:
list.sort( key=None, reverse=False)
如果指定参数,则使用比较函数指定的比较函数。reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)

e.g 指定第二个元素排序

# 获取第二个元素
def takeSecond(elem):
    return elem[1]

List1 = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二个元素排序
List1.sort(key=takeSecond)
print (List1)
>>> [(4, 1), (2, 2), (1, 3), (3, 4)]
# 降序
List1.sort(key=takeSecond,reverse = True)
print (List1)
>>> [(3, 4), (1, 3), (2, 2), (4, 1)]

e.g 去重不排序

# 去重不排序
List1 = [1,4,3,3,2,2]
List2 = list(set(List1))
List2.sort(key = List1.index)
print(List2)
>>> [1, 4, 3, 2]

sorted() 语法:
sorted(iterable, key=None, reverse=False)
iterable – 可迭代对象。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

e.g 指定第二个元素排序

List1 = [('b',2),('a',1),('c',3),('d',4)]
List2 = sorted(List1, key=lambda x:x[1])
print(List2)
>>> [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# 降序
List3 = sorted(List1, key=lambda x:x[1], reverse = True)
print(List3)
>>> [('d', 4), ('c', 3), ('b', 2), ('a', 1)]

e.g 不区分大小写排序
默认排序为:数字>大写字母>小写字母

s = 'S32RifaA6Cbe'
s1 = sorted(s)
print(s1)
>>> ['2', '3', '6', 'A', 'C', 'R', 'S', 'a', 'b', 'e', 'f', 'i']

s2 = sorted(s,key = str.upper)
print(s2)
>>> ['2', '3', '6', 'a', 'A', 'b', 'C', 'e', 'f', 'i', 'R', 'S']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值