Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 모양을 기반으로 구문을 정렬하는 프로그램

<시간/>

두 개의 목록이 주어졌다고 가정합니다. 몇 개의 선택된 구를 포함하는 '구문'과 다른 목록의 구를 포함하거나 포함하지 않을 수 있는 여러 문장을 포함하는 '문장'. 우리는 첫 번째 목록의 다양한 구가 두 번째 목록에 나타나는지 알아내고 두 번째 목록의 출현을 기준으로 첫 번째 목록 구를 정렬해야 합니다. 정렬된 목록 '구문'을 출력으로 반환합니다.

따라서 입력이 구문 =['강한', '내구성이 있는', '효율적인']과 같으면 문장 =['제품이 내구성이 있고 효율적입니다', '강하고 내구성이 있습니다', '효율적입니다', '좋아요 효율적이기 때문에'], 출력은 ['효율적', '내구성', '강함']

이 됩니다.

'효율적'이라는 문구는 문장 0, 2, 4에 등장합니다. 가장 많이 등장하므로 출력의 시작 부분에 있습니다. 'durable'과 'strong'이라는 문구는 각각 문장 0과 1, 1에 나타납니다. 따라서 이 구문은 출력에서 ​​다음 위치를 얻습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • cnt :=새 지도
  • 구의 각 기능에 대해 다음을 수행합니다.
    • cnt[기능] :=0
  • 문장의 각 응답에 대해 다음을 수행합니다.
    • p :=응답의 단어를 포함하는 새 목록
    • s :=p의 새로운 세트
    • s의 각 i에 대해 다음을 수행합니다.
      • i가 cnt에 있으면
        • cnt[i] :=cnt[i] + 1
  • 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']