鱼C论坛

 找回密码
 立即注册
查看: 6909|回复: 54

[技术交流] Python:每日一题 133

[复制链接]
发表于 2018-1-5 10:50:17 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-1-10 19:46 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
已有一个列表如下
list1 = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6, 16, 19, 12, 18, 4, 4, 16, 12, 13, 11, 0, 0, 12, 7, 10, 2, 7, 12, 4, 18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8, 18, 4, 12, 10, 1, 18, 7, 2, 9, 3, 11, 12, 2, 9, 13, 12, 18, 15, 1, 9, 5, 11, 6, 12, 9, 16, 14, 18, 0, 15, 4, 17, 5, 1, 13, 0, 10, 0, 6, 16, 15, 3, 16, 20, 18, 4, 18, 16, 3]
由此生成新的列表,要求为一个2维列表,包括list1的每个不重复元素和在list1中出现的次数。例如12在list1中出现11次,就记为[12, 11],最后按元素由小到大排序,生成如下的列表
[[0, 7], [1, 6], [2, 4], [3, 5], [4, 8], [5, 2], [6, 4], [7, 3], [8, 2], [9, 4], [10, 5], [11, 3], [12, 11], [13, 4], [14, 3], [15, 3], [16, 8], [17, 3], [18, 11], [19, 3], [20, 1]]

评分

参与人数 1荣誉 +4 鱼币 +4 贡献 +3 收起 理由
junyue + 4 + 4 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-5 11:03:51 | 显示全部楼层
  1. print(sorted([[i, list1.count(i)] for i in set(list1)]))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-5 14:17:14 | 显示全部楼层
list1 = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6, 16, 19, 12, 18, 4, 4,
         16, 12, 13, 11, 0, 0, 12, 7, 10, 2, 7, 12, 4, 18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8,
         18, 4, 12, 10, 1, 18, 7, 2, 9, 3, 11, 12, 2, 9, 13, 12, 18, 15, 1, 9, 5, 11, 6, 12, 9, 16,
         14, 18, 0, 15, 4, 17, 5, 1, 13, 0, 10, 0, 6, 16, 15, 3, 16, 20, 18, 4, 18, 16, 3]
new_list = set(list1)
final_list = []
for i in new_list:
    num_group = [i,list1.count(i)]
    final_list.append(num_group)
print(final_list)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-5 15:10:28 | 显示全部楼层
# 查找列表中每个元素出现的次数
# list_original  原始列表
# list_target    目标输出
# list_temp      转换用列表,用于存放原始列表中不重复的元素
# list_cell      转换用列表,用于存放原始列表中出现的元素和次数
list_original = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18,
                17, 6, 16, 19, 12, 18, 4, 4, 16, 12, 13, 11, 0, 0, 12, 7, 10,
                2, 7, 12, 4, 18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8, 18,
                4, 12, 10, 1, 18, 7, 2, 9, 3, 11, 12, 2, 9, 13, 12, 18, 15, 1,
                9, 5, 11, 6, 12, 9, 16, 14, 18, 0, 15, 4, 17,5, 1, 13, 0, 10,
                0, 6, 16, 15, 3, 16, 20, 18, 4, 18, 16, 3]
list_target = []
list_temp = []
list_cell = []
#将原始列表从小到大排序
list_original.sort()
#将元素列表中不重复的元素找出来,存放起来
for i in list_original:     
    if i not in list_temp:
        list_temp.append(i)
#print(list_temp)
#循环查找每个元素出现的次数        
for i in list_temp:
    list_cell =[i,list_original.count(i)]
    #将查找结果存放到列表中
    list_target.append(list_cell)
print(list_target)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-5 15:40:23 | 显示全部楼层
list1 = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6,
         16, 19, 12, 18, 4, 4, 16, 12, 13, 11, 0, 0, 12, 7, 10, 2, 7, 12, 4,
         18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8, 18, 4, 12, 10, 1, 18,
         7, 2, 9, 3, 11, 12, 2, 9, 13, 12, 18, 15, 1, 9, 5, 11, 6, 12, 9,
         16, 14, 18, 0, 15, 4, 17, 5, 1, 13, 0, 10, 0, 6, 16, 15, 3, 16,
         20, 18, 4, 18, 16, 3]
set1 = set(list1)
TT = []
for i in set1:
    d= list1.count(i)
    TT.append([i,d])
print(TT)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-5 15:46:15 | 显示全部楼层
  1. list1 = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6, 16, 19, 12, 18, 4, 4, 16, 12, 13, 11, 0, 0, 12, 7, 10, 2, 7, 12, 4, 18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8, 18, 4, 12, 10, 1, 18, 7, 2, 9, 3, 11, 12, 2, 9, 13, 12, 18, 15, 1, 9, 5, 11, 6, 12, 9, 16, 14, 18, 0, 15, 4, 17, 5, 1, 13, 0, 10, 0, 6, 16, 15, 3, 16, 20, 18, 4, 18, 16, 3]
  2. print([[i, list1.count(i)] for i in set(list1)])
复制代码


# set好像是自动按从小到大排序的?

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-5 17:02:17 | 显示全部楼层
  1. def fun133(list_x):
  2.     result = []
  3.     for i in range(min(list_x),max(list_x)+1):
  4.         result.append([i,list_x.count(i)])
  5.     return result

  6. if __name__ == '__main__':
  7.     print(fun133([12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6, 16, 19, 12, 18, 4, 4, 16, 12, 13, 11, 0, 0, 12, 7, 10, 2, 7, 12, 4, 18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8, 18, 4, 12, 10, 1, 18, 7, 2, 9, 3, 11, 12, 2, 9, 13, 12, 18, 15, 1, 9, 5, 11, 6, 12, 9, 16, 14, 18, 0, 15, 4, 17, 5, 1, 13, 0, 10, 0, 6, 16, 15, 3, 16, 20, 18, 4, 18, 16, 3]))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-5 17:46:10 | 显示全部楼层
  1. set1 = set(list1)
  2.     list2 = []
  3.     for i in  set1:
  4.         list2 .append([i, list1.count(i)])
  5.     print(list2)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-5 18:33:53 | 显示全部楼层
list1 = [12,1,3,19,0,1,16,8,19,10,6,10,0,4,3,18,2,18,17,6,16,19,12,18,4,4,16,12,13,11,0,0,12,7,10,2,7,12,4,18,13,18,16,17,14,12,1,12,4,14,8,18,4,12,10,1,18,7,2,9,3,11,12,2,9,13,12,18,15,1,9,5,11,6,12,9,16,14,18,0,15,4,17,5,1,13,0,10,0,6,16,15,3,16,20,18,4,18,16,3]
list1.sort()
list2 = []
for i in range(max(list1)+1):
    n = list1.count(i)
    list2.append([i,n])
print(list2)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-5 18:37:23 | 显示全部楼层
好像很久不见题目了,多写几个
  1. from collections import Counter

  2. def fun(lst):
  3.     return sorted(Counter(lst).most_common())

  4. def fun2(lst):
  5.     counter = Counter(lst)
  6.     return [[i, counter[i]] for i in counter]

  7. def fun3(lst):
  8.     return [[i, lst.count(i)] for i in set(lst)]
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2018-1-5 19:15:00 | 显示全部楼层
  1. from collections import Counter
  2. print(sorted([[i,j] for i,j in Counter(list1).most_common()]))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-5 22:31:04 | 显示全部楼层
  1. list1 = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6, 16, 19, 12, 18, 4, 4, 16, 12, 13, 11, 0,
  2.          0, 12, 7, 10, 2, 7, 12, 4, 18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8, 18, 4, 12, 10, 1, 18, 7, 2, 9, 3, 11,
  3.          12, 2, 9, 13, 12, 18, 15, 1, 9, 5, 11, 6, 12, 9, 16, 14, 18, 0, 15, 4, 17, 5, 1, 13, 0, 10, 0, 6, 16, 15, 3,
  4.          16, 20, 18, 4, 18, 16, 3]

  5. list1.sort()

  6. set1 = set(list1)
  7. result = []
  8. for each in set1:
  9.     result.append([each, list1.count(each)])
  10. print(result)
复制代码


结果:[[0, 7], [1, 6], [2, 4], [3, 5], [4, 8], [5, 2], [6, 4], [7, 3], [8, 2], [9, 4], [10, 5], [11, 3], [12, 11], [13, 4], [14, 3], [15, 3], [16, 8], [17, 3], [18, 11], [19, 3], [20, 1]]

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-6 10:58:57 | 显示全部楼层
QQ图片20180106105614.png
先排序列表 然后去重 在找出出现的位置

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 下次直接把程序发上来

查看全部评分

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

使用道具 举报

发表于 2018-1-6 13:56:08 | 显示全部楼层
本帖最后由 万事屋 于 2018-1-6 13:57 编辑

用堆写的。。也不知道名称和写法正不正规
  1. def dsort(ll):
  2.     d=[[ll.pop(),1,-1,-1]]
  3.     ld=1
  4.     for i in ll:
  5.         ss=0
  6.         while 1:
  7.             if d[ss][0]==i:
  8.                 d[ss][1]+=1
  9.                 break
  10.             elif d[ss][0]>i:
  11.                 if d[ss][2]==-1:
  12.                     d.append([i,1,-1,-1])
  13.                     d[ss][2]=ld
  14.                     ld+=1
  15.                     break
  16.                 else:
  17.                     ss=d[ss][2]
  18.             elif d[ss][0]<i:
  19.                 if d[ss][3]==-1:
  20.                     d.append([i,1,-1,-1])                  
  21.                     d[ss][3]=ld
  22.                     ld+=1
  23.                     break
  24.                 else:
  25.                     ss=d[ss][3]
  26.     return d
  27. def showlist(d,ss):
  28.     if ss==-1:
  29.         return []
  30.     else:
  31.         return showlist(d,d[ss][2])+[d[ss][0:2]]+showlist(d,d[ss][3])
  32.    
  33. ll=[12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6, 16, 19, 12, 18, 4, 4, 16, 12, 13, 11, 0, 0, 12, 7, 10, 2, 7, 12, 4, 18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8, 18, 4, 12, 10, 1, 18, 7, 2, 9, 3, 11, 12, 2, 9, 13, 12, 18, 15, 1, 9, 5, 11, 6, 12, 9, 16, 14, 18, 0, 15, 4, 17, 5, 1, 13, 0, 10, 0, 6, 16, 15, 3, 16, 20, 18, 4, 18, 16, 3]
  34. ff=dsort(ll)
  35. ans=showlist(ff,0)
  36. print(ans)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-6 15:16:07 | 显示全部楼层
list2=[0,3,2,3,4,8,6,7,8,9,5,8,7,6,5,4,3,5,1,0,2,4,6,8,]
#创建集合,存放不重复数字
j=set()
#遍历list2
for x in list2:

    j.add(x)
#将集合转换成列表
list3=list(j)
#排序
list3.sort()
print (list2)
print(list3)
#创建列表5存放结果
list5=[]
#print (list4)
for y in list3:
    #统计数字出现的次数
    a=list2.count(y)
    #print (a)
    #创建新列表4存放数字和出现的次数
    list4 = []
    list4.append(y)
    list4.append(a)
    #将列表4添加到列表5中
    list5.append(list4)
print (list5)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-6 23:05:43 | 显示全部楼层
  1. list1 = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6, 16, 19, 12, 18, 4, 4, 16, 12, 13,
  2.          11, 0, 0, 12, 7, 10, 2, 7, 12, 4, 18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8, 18, 4, 12, 10, 1, 18, 7,
  3.          2, 9, 3, 11, 12, 2, 9, 13, 12, 18, 15, 1, 9, 5, 11, 6, 12, 9, 16, 14, 18, 0, 15, 4, 17, 5, 1, 13, 0, 10,
  4.          0, 6, 16, 15, 3, 16, 20, 18, 4, 18, 16, 3]
  5. answer=[]
  6. list2=list(set(list1))
  7. list2.sort()
  8. for i in list2:
  9.         answer.append([i,list1.count(i)])
  10. print(answer)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-7 09:58:39 | 显示全部楼层
本帖最后由 timeislife 于 2018-1-7 09:59 编辑
  1. list1 = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6,16,
  2.          19, 12, 18, 4, 4, 16, 12, 13, 11, 0, 0, 12, 7, 10,2, 7, 12, 4, 18, 13,
  3.          18, 16, 17, 14,12, 1, 12, 4, 14, 8, 18, 4, 12, 10, 1, 18, 7, 2, 9, 3,
  4.          11, 12, 2, 9, 13,12, 18, 15, 1, 9, 5, 11, 6, 12, 9, 16, 14,18, 0, 15,
  5.          4, 17, 5, 1, 13, 0, 10, 0, 6, 16, 15, 3, 16, 20, 18, 4, 18,16, 3]
  6. temp = sorted(list(set(list1)))
  7. returnedlist = [[each,list1.count(each)] for each in temp]
  8. print(returnedlist)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-1-7 11:34:44 | 显示全部楼层
list1 = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6, 16, 19, 12, 18, 4, 4, 16, 12, 13, 11, 0, 0, 12, 7, 10, 2, 7, 12, 4, 18, 13, 18, 16, 17, 14, 12, 1, 12, 4, 14, 8, 18, 4, 12, 10, 1, 18, 7, 2, 9, 3, 11, 12, 2, 9, 13, 12, 18, 15, 1, 9, 5, 11, 6, 12, 9, 16, 14, 18, 0, 15, 4, 17, 5, 1, 13, 0, 10, 0, 6, 16, 15, 3, 16, 20, 18, 4, 18, 16, 3]
>>> temp=[]
>>> for each in list1:
        temp.append(list1.count(each))

       
>>> list2=sorted(zip(list1,temp))
>>> print(list2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-7 11:35:36 | 显示全部楼层
321123 发表于 2018-1-7 11:34
list1 = [12, 1, 3, 19, 0, 1, 16, 8, 19, 10, 6, 10, 0, 4, 3, 18, 2, 18, 17, 6, 16, 19, 12, 18, 4, 4,  ...

但是我的输出是[(0, 7), (0, 7), (0, 7), (0, 7), (0, 7), (0, 7), (0, 7), (1, 6), (1, 6), (1, 6), (1, 6), (1, 6), (1, 6), (2, 4), (2, 4), (2, 4), (2, 4), (3, 5), (3, 5), (3, 5), (3, 5), (3, 5), (4, 8), (4, 8), (4, 8), (4, 8), (4, 8), (4, 8), (4, 8), (4, 8), (5, 2), (5, 2), (6, 4), (6, 4), (6, 4), (6, 4), (7, 3), (7, 3), (7, 3), (8, 2), (8, 2), (9, 4), (9, 4), (9, 4), (9, 4), (10, 5), (10, 5), (10, 5), (10, 5), (10, 5), (11, 3), (11, 3), (11, 3), (12, 11), (12, 11), (12, 11), (12, 11), (12, 11), (12, 11), (12, 11), (12, 11), (12, 11), (12, 11), (12, 11), (13, 4), (13, 4), (13, 4), (13, 4), (14, 3), (14, 3), (14, 3), (15, 3), (15, 3), (15, 3), (16, 8), (16, 8), (16, 8), (16, 8), (16, 8), (16, 8), (16, 8), (16, 8), (17, 3), (17, 3), (17, 3), (18, 11), (18, 11), (18, 11), (18, 11), (18, 11), (18, 11), (18, 11), (18, 11), (18, 11), (18, 11), (18, 11), (19, 3), (19, 3), (19, 3), (20, 1)] 怎么解决能让他只出现一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-7 12:01:16 | 显示全部楼层
temp=[]
>>> for each in list1:
        temp.append(list1.count(each))

        
>>> list2=sorted(zip(list1,temp))
>>> list3=[]
>>> for each in list2:
        if each not in list3:
                list3.append(each)

               
>>> list3

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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