(1)按照数组元素出现频率降序排序(频率一样,那么按照数值大小进行排序)
示例如下
输入
a = [1,2,2,2,2,2,3,3,4,4,6]
输出:
b = [2,2,2,2,2,4,4,3,3,6,1]
'''

分析:如何实现上述功能?

第一步:将列表l2进行降序处理,通过调用,sort()方法,由于默认是升序,降序需要加入reverse参数,此步骤的原因后面便会知晓,其目的在于不用判断数值的大小,就可以得到,6,1,而不是1,6

第二步:对列表进行去重,对经过去重之后的列表l中的元素进行频率计算,也就是计算出现的频率,通过调用.count方法

第三步:第二步中得到的频率值,构成新的列表l3,列表中的元素代表了l2列表元素出现的次数,由于不同的元素出现的次数有可能是相同的,例如示例中,元素3,4出现的次数都为2,因此我们需要对由元素出现次数组成的列表进行去重。

第四步:对第三步去重之后得到的列表进行降序排序,然后调用两次for循环,即可得到最终的结果

值得注意的是:为什么第一步和第四步均要进行降序排序,为的就是最后输出的时候,直接按照出现的次数即可,相同次数不同值得大小,不用去考虑,因为之前已经对其进行了排序。

代码部分:

l1 = input('输入数字,并以逗号隔开').split(',')
l2 = []
l3 = []
l5 = []
for i in l1:
    l2.append(int(i))
l2.sort(reverse=True)  # l2 = [4,4,3,3,2,2,2,2,2,1]
def sort_1(l):
    l = list(set(l2)) #l=[1,2,3,4]
    for i in l:
        l3.append(l2.count(i)) #[1,5,2,2]
        l3.sort(reverse=True) #[5,2,2,1]
        l4 = list(set(l3))
        l4.sort(reverse=True)
    for i in l4:
        for j in l2:
            if l2.count(j) == i:
                l5.append(j)
    return l5
res = sort_1(l2)
print(res)

(2)


设计一个函数,统计一个字符中出现频率最高的字符及其出现次数,并利用函数对用户输入的任意字符串进行统计 ''' #aabbc 输出 2:[q,b] #频率出现最高字符不止一个 例如 aabbccd #abbaaccd 输出字符 {2:[1,b,c]} #aaabbc 输出字符 {3:[a]}


主要思路:

        给定任意字符串,首先去重,得到结果去原字符串中统计字符的频率,并得到由字符出现次数组成的列表。然后对列表进行降序

例如  aabbc--->{a,b,c}--->[1,2,2]---->[2,2,1]

然后针对集合元素循环,只要集合元素(去重结果)在原字符串中出现的次数等于刚才降序列表的第一个  即l[0]  那么就将这个元素添加到新的列表l1中 新的列表的元素是什么?就是出现频率最高的所有元素。出现的最多的次数 那么就是l[0]

def frequnecy_str(s):
    l = []  #统计次数的 列表
    set_str = set(s)
    for i in set_str:
        l.append(s.count(i))
    l.sort(reverse=True)  # [3,2,2,1]
    l1 = []
    for j in set_str:
        if s.count(j) == l[0]:
            l1.append(j)
    return {l[0]:l1}   #{次数,[哪些频率出现次数最多]}
s = input("输入任意字符串")
res = frequnecy_str(s)
print(res)