두 개의 목록이 주어졌다고 가정합니다. 몇 개의 선택된 구를 포함하는 '구문'과 다른 목록의 구를 포함하거나 포함하지 않을 수 있는 여러 문장을 포함하는 '문장'. 우리는 첫 번째 목록의 다양한 구가 두 번째 목록에 나타나는지 알아내고 두 번째 목록의 출현을 기준으로 첫 번째 목록 구를 정렬해야 합니다. 정렬된 목록 '구문'을 출력으로 반환합니다.
따라서 입력이 구문 =['강한', '내구성이 있는', '효율적인']과 같으면 문장 =['제품이 내구성이 있고 효율적입니다', '강하고 내구성이 있습니다', '효율적입니다', '좋아요 효율적이기 때문에'], 출력은 ['효율적', '내구성', '강함']
이 됩니다.'효율적'이라는 문구는 문장 0, 2, 4에 등장합니다. 가장 많이 등장하므로 출력의 시작 부분에 있습니다. 'durable'과 'strong'이라는 문구는 각각 문장 0과 1, 1에 나타납니다. 따라서 이 구문은 출력에서 다음 위치를 얻습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- cnt :=새 지도
- 구의 각 기능에 대해 다음을 수행합니다.
- cnt[기능] :=0
- 문장의 각 응답에 대해 다음을 수행합니다.
- p :=응답의 단어를 포함하는 새 목록
- s :=p의 새로운 세트
- s의 각 i에 대해 다음을 수행합니다.
- i가 cnt에 있으면
- cnt[i] :=cnt[i] + 1
- i가 cnt에 있으면
- res :=cnt의 모든 k에 대한 쌍(k, cnt[k])을 포함하는 새 목록
- k를 기준으로 목록을 정렬합니다.
- 카운트 값 k를 포함하지 않고 목록 res를 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(phrases, sentences): cnt = {} for feature in phrases: cnt[feature] = 0 for response in sentences: p = response.split() s = set(p) for i in s: if i in cnt: cnt[i] += 1 res = [[k, cnt[k]] for k in cnt] res.sort(key = lambda x:(-x[1], phrases.index(x[0]))) return [i[0] for i in res] print(solve(['strong', 'durable', 'efficient'], ['the product is durable and efficient', 'strong and durable', 'it is efficient', 'like it because it is efficient']))
입력
['strong', 'durable', 'efficient'], ['the product is durable and efficient', 'strong and durable', 'it is efficient', 'like it because it is efficient']
출력
['efficient', 'durable', 'strong']