鱼C论坛

 找回密码
 立即注册
查看: 1659|回复: 7

[已解决]列表元素 怎么按个数进行排序 如下

[复制链接]
发表于 2023-7-9 22:39:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
5 和4  个数最多 怎么让他们排在前面  感谢
最佳答案
2023-7-9 22:50:25
lst = [1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6]

sorted_lst = sorted(lst, key=lambda x: (lst.count(x), x), reverse=True)

print(sorted_lst)
微信截图_20230709223824.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-9 22:50:25 | 显示全部楼层    本楼为最佳答案   
lst = [1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6]

sorted_lst = sorted(lst, key=lambda x: (lst.count(x), x), reverse=True)

print(sorted_lst)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-9 22:52:56 | 显示全部楼层
如果您希望将数字5和4排在列表的前面,并保持原始顺序,可以按照以下步骤进行操作:

1. 创建一个空列表 `result` 用于存储结果。
2. 遍历原始列表,将数字5和4分别添加到 `result` 中。
3. 继续遍历原始列表,将除了5和4之外的其他元素添加到 `result` 中。
4. 返回 `result` 列表。

以下是实现此功能的代码示例:
def prioritize_54(lst):
    result = []

    # 将数字5和4添加到结果列表中
    for num in [5, 4]:
        result.extend([num] * lst.count(num))

    # 将除了5和4之外的其他元素添加到结果列表中
    for num in lst:
        if num not in [5, 4]:
            result.append(num)

    return result

# 测试样例
lst = [1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6]
result = prioritize_54(lst)
print(result)
运行以上代码会输出排好序的列表:
[5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 1, 2, 2, 2, 2, 3, 3, 3, 6, 6]

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-9 23:06:44 | 显示全部楼层

可以了 就是大神 能解释下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-9 23:08:13 | 显示全部楼层
MoistenLe 发表于 2023-7-9 23:06
可以了 就是大神 能解释下吗

1. 首先,给定了一个列表lst,其中包含了一些整数。

2. 接下来,使用sorted函数对列表lst进行排序。sorted函数可以接受一个可迭代对象作为输入,并返回一个新的已排序的列表。

3. 在sorted函数中,使用了两个参数来指定排序规则:

   · key=lambda x: (lst.count(x), x):这是一个匿名函数(lambda函数),用于指定排序的关键字。对于列表中的每个元素x,key函数返回一个元组,元组的第一个元素是x在列表中的出现次数,第二个元素是x的值。这意味着排序首先按照元素的出现次数进行排序,如果出现次数相同,则按照元素的值进行排序。
   
   · reverse=True:这个参数指定排序的顺序是降序(从大到小),即出现次数多的元素和值大的元素会排在前面。

4. 最后,将排序后的结果赋值给变量sorted_lst。

5. 最后一行代码使用print函数打印出排序后的列表sorted_lst。

总结起来,这段代码的功能是对给定的列表进行排序,排序规则是首先按照元素在列表中的出现次数进行降序排序,如果出现次数相同,则按照元素的值进行降序排序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-9 23:10:26 | 显示全部楼层
x_p = list(input("请随便输入一串数字:"))
list0 =[int(i)for i in x_p]

list1 = sorted(list0, key=lambda x: (list0.count(x), x), reverse=True)

print(list1)


diyi = list1[0]
count1 = 0
for each1 in range(len(list1)):
    if list1[each1] ==diyi:
        count1 +=1
    else:
        break
count2 = 0
dier = list1[count1]
for each2 in range(count1,len(list1)):
    if list1[each2] == dier:
        count2+=1
    else:
        break
if count1>len(list1)/3:
    print("主要元素是:", diyi)
    if count2>len(list1)/3:
        print("还有:", dier)
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-9 23:14:02 | 显示全部楼层
sfqxx 发表于 2023-7-9 22:52
如果您希望将数字5和4排在列表的前面,并保持原始顺序,可以按照以下步骤进行操作:

1. 创建一个空列表  ...

如果是一个随机列表 就不行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-9 23:19:25 | 显示全部楼层
isdkz 发表于 2023-7-9 23:08
1. 首先,给定了一个列表lst,其中包含了一些整数。

2. 接下来,使用sorted函数对列表lst进行排序。so ...

666
x_p = list(input("请随便输入一串数字:"))
list0 =[int(i)for i in x_p]

list1 = sorted(list0, key=lambda x: (list0.count(x), x), reverse=True)

print(list1)


diyi = list1[0]
count1 = 0
for each1 in range(len(list1)):
    if list1[each1] ==diyi:
        count1 +=1
    else:
        break
count2 = 0
dier = list1[count1]
for each2 in range(count1,len(list1)):
    if list1[each2] == dier:
        count2+=1
    else:
        break
if count1>len(list1)/3:
    print("主要元素是:", diyi)
    if count2>len(list1)/3:
        print("还有:", dier)
        


你看下我这个有毛病没
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 13:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表