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) ]
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() 메서드를 제공한다.
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]
[item for item in iterable if 조건(item)]
이 기본 형식이다.[len(word) for word in words if len(word) > 3]
# [4, 4, 5, 4, 4, 6]