Programmers-メニュー更新
13141 ワード
質問リンク
関数と変数名を決定するのに非常に時間がかかります. tuple,dictionaryの基本apiに詳しくない できるだけ関数を作成しないでください. 変数名の命名に使用します. tupleとdictionaryの基本apiは暗記したほうがいい.
データ個数でソートされた配列を返すmost common()メソッドが提供されます.
List、Set、Dictionaryではfor文とif文を使用して、セット内の要素を整理します. for文だけでなく、リスト式の要素をフィルタできます.
私の答え
from itertools import combinations
def convertObj(order, courseItem, solObj):
if len(order) < courseItem:
return
tmp = list(combinations(order, courseItem))
for value in tmp:
value = tuple(sorted(value))
key = ""
for k in range(courseItem):
key += value[k]
if key in solObj:
solObj[key] += 1
else:
solObj[key] = 0
def solution(orders, course):
result = []
for i in range(len(orders)):
orders[i] = list(orders[i])
for courseItem in course:
solObj = {}
for order in orders:
convertObj(order, courseItem, solObj)
all_keys = solObj.keys()
all_values = solObj.values()
if len(all_keys) >= 2:
mmax = max(all_values)
if mmax > 0:
for key, value in solObj.items():
if value == mmax:
result.append(key)
result.sort()
return result
別の解釈
import collections
import itertools
def solution(orders, course):
result = []
for course_size in course:
order_combinations = []
for order in orders:
order_combinations += itertools.combinations(sorted(order), course_size)
most_ordered = collections.Counter(order_combinations).most_common()
result += [ k for k, v in most_ordered if v > 1 and v == most_ordered[0][1] ]
return [ ''.join(v) for v in sorted(result) ]
その他のクリーンアップ
Coctionsモジュール内のCounterクラス
collections.カウンタカウントの使用
from collections import Counter
Counter('hello world') # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
most_common()
データ個数でソートされた配列を返すmost common()メソッドが提供されます.
Counter('hello world').most_common()
# [('l', 3), ('o', 2), ('h', 1), ('e', 1), (' ', 1), ('w', 1), ('r', 1), ('d', 1)]
この方法を用いたパラメータがKを超えると、その数だけが返されるため、最も多いK個のデータが得られる.Counter('hello world').most_common(1) # [('l', 3)]
リスト式
文のリスト式
[item for item in iterable]
|は基本フォーマットです.words = ['나는', '파이썬을', '공부하고', '있습니다.', '파이썬은', '무척', '심플하고', '명료합니다.']
[len(word) for word in words]
# [2, 4, 4, 5, 4, 2, 4, 6]
リスト式if文でフィルタ
[item for item in iterable if 조건(item)]
|は基本フォーマットです.[len(word) for word in words if len(word) > 3]
# [4, 4, 5, 4, 4, 6]
Reference
この問題について(Programmers-メニュー更新), 我々は、より多くの情報をここで見つけました https://velog.io/@singco/Programmers-메뉴-리뉴얼テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol