小数点を検索



方法


与えられた文字列を重複しない整数リストに変換し、小数を判別する
1.文字列->重複リストなし
from itertools import permutations

numbers = '011'

permuList = [] 
permuSet = [] 
for i in range(1, len(numbers)+1):
  tmp = list(permutations(numbers, i))
  for j in range(len(tmp)):
    if(len(tmp[j])==1):
      permuList.append(int(tmp[j][0]))
    else:
      sum = ''
      for k in range(len(tmp[j])):
        sum += tmp[j][k]
      permuList.append(int(sum))
  permuSet = list(set(permuList)) #중복 제거
  
print(permuList) #중복 고려 안한 original list
print(permuSet) #set을 이용해 중복 제거한 list

✏️ notes


  • 配列の使用(itertoolsライブラリ配列)

  • リストのトゥーフに近づくのは難しいと思いますが...tupleも同様にインデックスでアクセス!!しかし、tuple要素は変更できません.

  • リストの重複を除去するのは簡単です.リストをsetにリセットすればいい!(フォーマットはlist->set->listと同じ)
  • set1 = set(list1)
    list2 = list(set1) #중복없는 리스트가 됨
    2.小数を判別する
    list1 = [0, 1, 101, 10, 11, 110]
    
    for n in list1:
      flag = False
      if(n == 0 or n == 1): continue
      for i in range(2, n-1): #1과 자기자신 외의 수로 나누어지는지
        if(n % i == 0):
          flag = True
          break
      if(flag == True): continue 
      print(n)

    最終コード

    from itertools import permutations
    
    def solution(numbers):
    #1. 문자열->중복없는 리스트화
        permuList = [] 
        permuSet = [] 
        for i in range(1, len(numbers)+1):
            tmp = list(permutations(numbers, i))
            for j in range(len(tmp)):
                if(len(tmp[j])==1):
                    permuList.append(int(tmp[j][0]))
                else:
                    sum = ''
                    for k in range(len(tmp[j])):
                        sum += tmp[j][k]
                    permuList.append(int(sum))
                permuSet = list(set(permuList)) #중복 제거
        
    #2. 소수판별
        cnt = 0
        for n in permuSet:
            flag = False
            if(n == 0 or n == 1): continue
            for i in range(2, n-1): #1과 자기자신 외의 수로 나누어지는지
                if(n % i == 0):
                    flag = True
                    break
            if(flag == True): continue 
            cnt += 1
        
        return cnt

    👀 Python-未知の他の解釈を探る


    」tuple文字列貼り付けtip
    ''.join(map(str, 해당 리스트))
    89 join()関数
    String間に特定の文字列を挿入することによって分割された文字列をマージする関数です.
    89 map()関数
    map(f,iterable)は、関数(f)と反復可能(iterable)のデータ型を入力し、入力したデータ型の各要素を組み合わせて関数(f)が実行した結果を返す関数である.
    そのためです.🐶お疲れ様でした…こんなやり方があったそうです.🥲
    このように歩くと、時間の複雑さも少なくなります.これを利用して解いてみましょう.

    改良されたソースコード

    from itertools import permutations
    
    def solution(numbers):
    #1. 문자열->중복없는 리스트화 (변경)
        permuList = [] 
        permuSet = [] 
        for i in range(1, len(numbers)+1):
            tmp = list(permutations(numbers, i))
            for j in range(len(tmp)):
                num = int(''.join(map(str, tmp[j])))
                permuList.append(num)
        permuSet = list(set(permuList)) #중복 제거
        
    #2. 소수판별
        cnt = 0
        for n in permuSet:
            flag = False
            if(n == 0 or n == 1): continue
            for i in range(2, n-1): #1과 자기자신 외의 수로 나누어지는지
                if(n % i == 0):
                    flag = True
                    break
            if(flag == True): continue 
            cnt += 1
        
        return cnt

    📚 reference


  • 別の解法https://velog.io/@insutance/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4Python-%EC%86%8C%EC%88%98-%EC%B0%BE%EA%B8%B0

  • join()、map()関数
    https://velog.io/@qhsh866/Python-split-join-map-%EB%AC%B8%EC%9E%90%EC%97%B4-%EA%B4%80%EB%A0%A8-%ED%95%A8%EC%88%98-%EC%A0%95%EB%A6%AC