Python:毎日1題001

3703 ワード


テーマ:4つの数字があります:1、2、3、4、互いに異なっていて重複していない3桁の数を構成することができますか?それぞれいくらですか.
**プログラム分析:100、10、個の数字はすべて1、2、3、4です.すべての配列を構成した後、条件を満たさない配列を取り除きます.
 
個人解題の考え方
配列組合せ知識を用いて合計4 X 3 X 2=24個の数を算出し,各数をリストに入れて印刷出力するように構成した.
  import random
  li = ["1","2","3","4"]
  all_sum_num = 4*4*4
  new_sum_list = []
  for i in range(all_sum_num):
      choose_li =  random.sample(li,3)
      new_num_str = "".join(choose_li)
      new_sum_list.append(new_num_str)
  num_set = set(new_sum_list)
  num_str_list =  list(num_set)
  print(num_str_list)
  print(len(num_str_list))

  
分析:この書き方には、ランダムに取り出した3つの数がすべての可能な数を完全に取ることができず、結果が一意ではなく、プログラムを実行するたびに結果が一致しない可能性があるという脆弱性があります.
 
参考解答方法:
  li = []
  for i in range(1,5):
      for j in range(1,5):
          for k in range(1,5):
              if i != k and i != j and j != k:
                  num = i*100 + j*10 + k
                  li.append(num)
  ​
  print(li)
  print(len(li))

  
解析:3つのforサイクルでif条件判断を加え、発生した数をリストに入れればよい
上記のコードは引き続き簡略化できます
  
  li1 = [1,2,3,4]
  li2  = [a*100 + b*10 +c for a in li1 for b in li1 for c in li1 if a != b and a != c and b != c]
  print(li2)
  print(len(li2))

  
分析:リスト解析式を用いて、百ビット、十ビット、個ビットの数字をそれぞれ生成し、リストの要素を合成する.
 
 
関連知識:
リスト解析
リスト解析式、リスト導出式とも呼ばれます
 
構文
  
[expression for iter_var in iterable1]



[expression for iter_var2 in iterable2 ...

                  for iter_varN in iterableN]


[expression for iter_var in iterable1

                  if condition]

リスト解析式は、リストなどの反復可能なオブジェクトを別のリストに変換するツールです.変換中に、新しいリストに追加するには、エレメントが条件を満たす必要があることを指定し、指定した式に従って変換できます.
例1
  
  #  1*1,2*2,3*3,4*4,5*5,6*6,9*9   
  li1 = [x*x for x in range(1,11)]
  print(li1)

  
例2
2つのループを使用する場合
  
  li1 = [m+n for m in range(3) for n in range(2)]
  print(li1)
  ​
  #li1              for  , m       for  ,n          for  
  li2 = []
  for i in range(3):
      for j in range(2):
          num = i+j
          li2.append(num)
  print(li2)

  
例3
  
  #            ,           
  li3=[[1,2],[3,4,5],[6,7],[8]]
  print([x  for i in li3 for x in i]) 

  
例4
  
  #             
  lia=[2,3,4,5]
  lib=[3,4,5,6]
  zip_li = zip(lia,lib)
  print(zip_li) #     zip            ,   for     
  print([i*j for i,j in zip(lia,lib)])

  
例5
  
  #            1   
  text = "Alibaba founder Jack Ma laughs off AC Milan football club purchase rumors"
  first_charts=[word[0] for word in text.split()]
  print(first_charts)

  
例6
リスト生成式加算三元演算
  
  #                      
  lix = ['1','2','3','i','8']
  liy = [int(x)if x.isdigit()else x for x in lix]
  print(liy)
 

 
例7
  #       5  *10
  lic = [1,3,4,10,18]
  print([x*10 for x in lic if x < 5 ])
  #          ,         ,                ,     else
  print([x*10 if x < 5 else x for x in lic])
  #               

  
(本文番号001、先発は2018年9月11日、修正は2018年9月12日)
 
 
転載先:https://www.cnblogs.com/Nicholas0707/p/9630924.html