Python基础练习之set/dict练习

1.用户输入一个数字

  • 打印每一位数字及其重复的次数

(1)字符串练习2用的方法

while True:    
    num = input().strip().lstrip('0')
    if num.isdigit():
        break

count = [0] * 10
for j in num:
    x = int(j)
    if count[x] == 0:  
        count[x] = num.count(j)
        print('num is {}, count is {}'.format(j,count[x]))

(2)用dict做的,不建议用count

while True:    
    num = input().strip().lstrip('0')
    if num.isdigit():
        break

d = {}
count = 0
for i in num:
    if i not in d:
        #d.setdefault(i,num.count(i))
        d[i] = num.count(i)
        count += 1
print(count)

for k,v in d.items():
    print('num is {}, count is {}'.format(k,v))

(3)

while True:
    num = input('Please input a positive integer >>').strip().lstrip('0')
    if num.isdigit:
        break
    else:
        print('wrong number')

d = {}
for i in num:
    if i not in d:
        d[i] = 1
    else:
        d[i] += 1
print(d)

d = {}
for i in num:
    if not d.get(i):
        d[i] = 0
    d[i] += 1
print(d)
# if not d.get(i)等价于 if not None, 也就是说当d.get(i) = None(get取不到,默认None) 时进入,等于0 的时候也就是i不在d里

d = {}
for i in num:
    d[i] = d.get(i,0) + 1
print(d)
# (i,0) i没有就取0,或者的关系

2.数字重复统计

  • 随机产生100个整数
  • 数字范围[-1000,1000]
  • 升序输出所有不同的数字及其重复的次数
    import random
    
    nums = []
    for _ in range(100):
        nums.append(random.randint(-1000,1000))
    
    # 把数字弄进字典里,用 d[i] = nums.count(i)来计算重复
    # key为数字(d[i]),value为数字的重复次数(nums.count(i))
    d = {}
    for i in nums:
        if i not in d:
            d[i] = nums.count(i)
    #print(d)
    
    # 创建数字的排序列表
    sort = []
    for k in d.keys():
        sort.append(k)
    
    # 二元选择排序来进行排序
    for  j in range(len(sort)//2):
        minindex = j
        maxindex = -j-1
        for u in range(j+1,len(sort)-j):
            if sort[u] < sort[minindex]:
                minindex = u
            if sort[-u-1] > sort[maxindex]:
                maxindex = -u-1
    
        if j != minindex:
            sort[j], sort[minindex] = sort[minindex], sort[j]
            if j == len(sort) + maxindex:
                maxindex = minindex
        if -j-1 != maxindex:
            sort[-j-1], sort[maxindex] = sort[maxindex], sort[-j-1]
    
    # 打印结果
    for q in range(len(sort)):
        if d.get(sort[q]) > 1:
            print('num is {}, count is {}'.format(sort[q],d.get(sort[q])))
    

  • sort法
    import random
    
    # 用随机数创建数字列表
    # 把数字弄进字典,计算重复
    nums = []
    for _ in range(100):
        nums.append(random.randint(-1000,1000))
    d = {}
    for i in nums:
        if i not in d:
            d[i] = nums.count(i)
    #print(d)
    
    # 创建去重的数字列表,并排序
    num = []
    for k in d.keys():
        num.append(k)
        num.sort()
    
    # 打印结果    
    for j in num:
        if d.get(j) > 1:
            print('number is {}, count is {}'.format(j,d.get(j)))
    

  • 最终版
    from collections import OrderedDict
    import random
    
    # 创建数字列表,并排序
    nums = []
    for _ in range(100):
        nums.append(random.randint(-1000,1000))
    nums.sort()
    #print(nums)
    
    # 创建OrderedDict,并计算重复(因为前面已经排序了,用这个字典,会按照我们输入的顺序排列元素)
    od = OrderedDict()
    for i in nums:
        if i not in od:
            od[i] = 0
        od[i] += 1
    
    # 打印结果
    for k,v in od.items():
        if v > 1:
            print('number is {}, count is {}'.format(k,v))
    

59cd967b1eab013230000002


  • 3.字符串统计

    • 字符表’abcdefghijklmnopqrstuvwxyz’
    • 随机挑选2个字母组成字符串,共挑选100个
    • 降序排出这100个字符串及重复的次数
      # 创建字母表
      #alphabet = 'abcdefghijklmnopqrstuvwxyz'
      alphabet = []
      for i in range(97,123):
          alphabet.append(chr(i))
      #print(alphabet)
      
      import random
      
      # 创建字母列表,并把符合条件的字符串添加到该列表
      alpha = []
      for p in range(100):
          a = []
          for q  in range(2):
              a.append(random.choice(alphabet))
          s = a[0] + a[1]
          alpha.append(s)
      #print(alpha)
      
      # 把字符串导入到字典,并计算重复
      d = {}
      for j in alpha:
          d[j] = alpha.count(j)
      #print(d)
      
      # 创建排序列表,并把去重的字符串添加到该列表
      sort = []
      for t in d.keys():
          sort.append(t)
      #print(sort)
      
      # 二元选择排序
      for m in range(len(sort) // 2):
          maxindex = m
          minindex = -m-1
          for n in range(m+1, len(sort) - m):
              if sort[n] > sort[maxindex]:
                  maxindex = n
              if sort[-n-1] < sort[minindex]:
                  minindex = -n-1
      
          if m != maxindex:
              sort[m], sort[maxindex] = sort[maxindex], sort[m]
              if m == minindex + len(sort):
                  minindex = maxindex
          if -m-1 != minindex:
              sort[-m-1], sort[minindex] = sort[minindex], sort[-m-1]
      #print(sort)
      
      # 打印结果
      for r in sort:
          if d.get(r) > 1:
              print('string is {}, count is {}'.format(r,d.get(r)))
      

  • OrderedDict版
    # 创建字母表
    #alphabet = 'abcdefghijklmnopqrstuvwxyz'
    alphabet = []
    for i in range(97,123):
        alphabet.append(chr(i))
    #print(alphabet)
    
    import random
    from collections import OrderedDict
    
    # 创建字母列表,并把符合条件的字符串添加进去
    # 进行排序,然后反转(因为降序,所以反转)
    alpha = []
    for _ in range(100):
        #alpha.append(random.choice(alphabet)+random.choice(alphabet))
        #alpha.append(''.join(random.sample(alphabet,2)))  #随机采样
        alpha.append(''.join(random.choice(alphabet) for _ in range(2)))   #生成器
    
    alpha.sort()
    alpha.reverse()
    #print(alpha)
    
    # 创建OrderedDict,把字符串倒进去,并计算重复
    od = OrderedDict()
    for j in alpha:
        if j not in od:
            od[j] = 1
        od[j] += 1
    
    # 打印结果
    for k,v in od.items():
        if v > 1:
        print('alpha is {}, count is {}'.format(k,v))
    

  • sorted版

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87674

(1)
nolannolan
上一篇 2017-10-09
下一篇 2017-10-09

相关推荐

  • python数据类型及其函数方法归纳总结

    数据类型的分类: ֺ数值型: int ,float, complex, bool     序列对象: 字符串,列表,元组tuple     键值型 集合set,字典dict 如果按照可hash性来分类 hashable(可哈希性) An object is hashable if it has a hash value which never changes…

    2017-10-09
  • Python函数式编程指南:目录和参考

    目录: 概述 这一篇简要地描述了函数式编程和一些相关的概念。 函数 这一篇展示了关于函数可能不常用到的部分特征并尝试引导诸位使用函数式的思维解决问题,并介绍了诸多有用的内建函数。 迭代器 这一篇介绍了迭代器以及Python对迭代器的语法级的支持,还包括了内置模块itertools的介绍。 生成器 这一篇介绍了自定义的迭代器——生成器,并展示了生成器的用途和使…

    Linux干货 2015-03-11
  • 通过堡垒机代理SSH运行Ansible(译)

    有一种常见的网络安全模式是阻止私有网络外部对应用服务器的所有连接(指除了业务数据外其它的连接,如后台管理系统和内部业务系统。译者注),然后使用 DMZ 区域中的 堡垒机 来选择性的将到服务器的流量加入白名单。 我们有这样的一个服务器池,只允许来自特定 IP 地址的 SSH 流量。这些服务器还由 Ansible…

    Linux干货 2015-02-14
  • enumerate用法和转置矩阵求解、效率测试

    enumerate用法和转置矩阵求解、效率测试

    2018-04-08
  • python函数与作用域

    ##函数– 函数— 数学定义:y=f(x),y是x的函数,x是自变量— python函数:由若干语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元;完成一定的功能 – 函数的作用— 结构化编程对代码的最基本的封装,一般按照功能组织一段代码— 封装的目的是为了复用,减少冗余代…

    2017-10-17
  • 装饰器

    装饰器 需求 一个加法函数,想增强它的功能,能够输出被调用过以及调用的参数信息 def add(x, y): return x + y 增加信息输出功能 def add(x, y): print(“call add, x + y”)  # 日志输出到控制台 return x + y p 上面的加法函数是完成了需求,但是有以下的缺点 打…

    Python笔记 2018-04-23