Chekio上面的一道题,觉得挺有意思的,随笔记录一下
比如说
[4, 6, 2, 2, 6, 4, 4, 4]:
4出现的次数最多,6和2出现的次数一样,但是6在2前面,因此该列表根据元素出现次数排序后的结果应该为:
[4, 4, 4, 4, 6, 6, 2, 2]
def frequency_sort(items):
# your code here
lst1 = []
for i in items:
if i not in lst1:
lst1.append(i)
lst = []
dic = {}
# # print(lst1)
for i in lst1:
dic[i] = items.count(i)
dic = dict(sorted(dic.items(), key=lambda x:x[1], reverse=True))
# #print(dic)
count = 0
for k, v in dic.items():
for i in range(v):
lst.append(k)
# # print(lst)
return lst
if __name__ == '__main__':
print("Example:")
print(frequency_sort([4, 6, 2, 2, 6, 4, 4, 4]))
# These "asserts" are used for self-checking and not for an auto-testing
assert list(frequency_sort([4, 6, 2, 2, 6, 4, 4, 4])) == [4, 4, 4, 4, 6, 6, 2, 2]
assert list(frequency_sort(['bob', 'bob', 'carl', 'alex', 'bob'])) == ['bob', 'bob', 'bob', 'carl', 'alex']
assert list(frequency_sort([17, 99, 42])) == [17, 99, 42]
assert list(frequency_sort([])) == []
assert list(frequency_sort([1])) == [1]
print("Coding complete? Click 'Check' to earn cool rewards!")
最开始我使用集合去重,但是发现使用set函数去重把元素的顺序打乱了,破坏了位置稳定性,于是索性使用列表把没在里面的元素加进去,完成一个去重的功能。
还有比较有意思的就是字典排序,可以根据键也可以根据值,记录一下
dic = sorted(dic.items(), key=lambda x:x[1], reverse=True)
首先 - 字典.items(),然后使用匿名函数把字典的值设置为key,也就是根据值排序,sorted默认从小到大,reverse=True设置排序顺序为从大到小
至于这个集合去重,确实有问题,使用之后破坏了元素位置的稳定性,害我找一半天原因,甚至想在字典里倒腾键值对的位置顺序,不过的确挺有意思的,随笔记录一下。