고효율python 코드 지속적 축적
1. 2D 배열의 첫 번째 요소를 기준으로 다음과 같이 정렬합니다.
data = [[2,3],[5,4],[9,6],[4,7],[8,1]]
data.sort(key=lambda x:x[0])
print(data)
[[2, 3], [4, 7], [5, 4], [8, 1], [9, 6]]
2.빠른 무게 제거
def dedupe(items, key=None):
"""
items:
key: items (dict )
"""
seen = set()
for item in items:
val = item if key is None else key(item)
if val not in seen:
yield item
seen.add(val)
nums = [1,2,32,2,2,4,3,2,3,42]
print(list(dedupe(nums)))
# [1, 2, 32, 4, 3, 42]
students = [
{"name": "Stanley", "score": 88},
{"name": "Lily", "score": 92},
{"name": "Bob", "score": 91},
{"name": "Well", "score": 80},
{"name": "Bob", "score": 90},
{"name": "Peter", "score": 80}
]
deduped_students = list(dedupe(students, key=lambda s: s['name']))
print(deduped_students)
"""
[{'name': 'Stanley', 'score': 88},
{'name': 'Lily', 'score': 92},
{'name': 'Bob', 'score': 91},
{'name': 'Well', 'score': 80},
{'name': 'Peter', 'score': 80}] #
"""
#
deduped_students = list(dedupe(students, key=lambda s: (s['name'], s['score'])))
3.jaccar 싱크로율: 두 문장이 단어를 나눈 후 단어의 교집합과 단어의 병집합의 비례
def sim_jaccard(s1, s2):
"""jaccard """
s1, s2 = set(s1), set(s2)
ret1 = s1.intersection(s2) #
ret2 = s1.union(s2) #
sim = 1.0 * len(ret1) / len(ret2)
return sim
4. 거리 유사도 편집: 한 문장을 다른 문장으로 전환하는 데 필요한 편집 횟수, 편집은 삭제, 추가, 교체를 포함하고 가장 긴 문장의 길이를 귀일화하여 유사도를 얻는다.
def sim_edit(s1, s2):
""" """
def edit_distance(str1, str2):
len1, len2 = len(str1), len(str2)
dp = np.zeros(((len1 + 1, len2 + 1)))
for i in range(len1 + 1):
dp[i][0] = i
for j in range(len2 + 1):
dp[0][j] = j
for i in range(1, len1 + 1):
for j in range(1, len2 + 1):
temp = 0 if str1[i - 1] == str2[j - 1] else 1
dp[i][j] = min(dp[i - 1][j - 1] + temp, min(dp[i - 1][j] + 1, dp[i][j - 1] + 1))
return dp[len1][len2]
# 1.
res = edit_distance(s1, s2)
# 2. 0~1
maxLen = max(len(s1), len(s2))
sim = 1 - res * 1.0 / maxLen
return sim
5.simHash 싱크로율: 먼저 두 문장의simhash 2진법 인코딩을 계산하고 해명거리를 사용하여 계산하며 마지막으로 두 문장의 최대simhash값을 사용하여 싱크로율을 귀일화한다.
한명 거리라고도 하는 해밍 디스턴스는 정보론에서 두 등장 문자열 사이의 한명 거리는 두 문자열이 대응하는 위치의 서로 다른 문자의 개수이다.즉, 하나의 문자열을 다른 문자열로 바꾸는 데 필요한 문자 개수이다.예를 들어 101101과 1001001 사이의 한명 거리는 2이다.우리가 흔히 말하는 문자열 편집 거리는 일반적인 형식의 한명 거리이다.
from simhash import Simhash
def sim_simhash(s1, s2):
a_simhash = Simhash(s1, f=64)
b_simhash = Simhash(s2, f=64)
# hash
tmp1 = bin(a_simhash.value)
tmp2 = bin(b_simhash.value)
max_hashbit = max(len(tmp1), len(tmp2))
#
distance = a_simhash.distance(b_simhash)
sim = 1- distance * 1.0 / max_hashbit
print(sim)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.