다음과 같은 특별한 목록이 있습니다.
[0,0,0,1,0,1,0,1,1,1,0,1]
다음과 같은 문자 목록에 매핑하고 싶습니다.
['+','+','+','-','+','-','+','-','-','-','+','-']
여기에 몇 가지 코드가 있습니다. 공동 확률을 계산하기 위해 확률을 곱합니다.
def solve_all_asigned(self,joint_s):
mult_val=1
for tab in self.tables:
if tab['decision']:
continue
name=tab['name']
nr=name.replace('.',' ')
nr_spd=re.split(' ',nr)
val=''
check_list=[x in joint_s.keys() for x in nr_spd]
if False in check_list:
continue
val=''.join(map(joint_s.get,nr_spd))
mult_val=mult_val*tab[val]
return mult_val
n=22
joint_s2={}
all_combinations=list(itertools.product([0,1],repeat=n))
for binlist in all_combinations:
for i in range(n):
joint_s2[nan_set[i]]='+' if binlist[i]=='0' else '-'
s.append(self.solve_all_asigned(joint_s2))
ss=sum(s)
joint_s:{'AA': 'nan', 'AC': 'nan', 'AB': 'nan', 'AE': 'nan', 'AD': 'nan', 'AF': 'nan', 'A': 'nan', 'C': 'nan', 'B': 'nan', 'E': 'nan', 'D': 'nan', 'G': 'nan', 'F': 'nan', 'I': 'nan', 'H': 'nan', 'K': 'nan', 'J': 'nan', 'M': 'nan', 'L': 'nan', 'O': 'nan', 'N': 'nan', 'Q': 'nan', 'P': '+', 'S': 'nan', 'R': 'nan', 'U': 'nan', 'T': 'nan', 'W': 'nan', 'V': 'nan', 'Y': 'nan', 'X': '+', 'Z': 'nan'}
nan_set:['A', 'C', 'B', 'E', 'D', 'G', 'F', 'I', 'H', 'K', 'J', 'M', 'L', 'O', 'N', 'Q', 'S', 'R', 'U', 'T', 'W', 'V']
tab:{'name': 'A.B', '--': 0.19999999999999996, 'decision': False, '+-': 0.6, '++': 0.4, '-+': 0.8}
어떻게 할 수 있습니까?
원래 질문에 답하기 위해 0 및 1 정수 목록을 더하기 및 빼기 기호에 매핑하는 효율적인 방법이 있습니다.
binlist = [0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1]
a = ['+-'[u] for u in binlist]
print(a)
산출
['+', '+', '+', '-', '+', '-', '+', '-', '-', '-', '+', '-']
제가 위에서 말한대로하지만,이 수 실제로 확률 계산에 필요하지.
다음은 코드를 개선 할 수있는 몇 가지 다른 개선 사항입니다.
all_combinations=list(itertools.product([0,1],repeat=n))
for binlist in all_combinations:
많은 RAM을 낭비합니다 . 들어는 n = 22
의 all_combinations
목록은 2200 만 이상 4 항목 튜플이 포함되어 있습니다. product
직접 출력을 반복하는 것이 훨씬 더 효율적입니다 .
for binlist in itertools.product([0, 1], repeat=n):
이 줄에서 :
joint_s2[nan_set[i]]='+' if binlist[i]=='0' else '-'
문자열binlist[i]
에 대해 테스트 하지만 튜플에는 문자열 이 아닌 정수 0과 1이 포함되어 있으며 Python은 숫자 문자열을 정수로 또는 그 반대로 자동으로 변환하지 않습니다.'0'
binlist
또 다른 수수께끼 섹션은
nr=name.replace('.',' ')
nr_spd=re.split(' ',nr)
왜 정규식을 사용합니까? 내장 된 str.split
방법을 사용하지 않는 이유는 무엇입니까?
nr_spd = name.split('.')
OTOH, name
필드가 하나 이상의 공백과 최대 단일 점으로 구분 될 수있는 경우 다음을 수행 할 수 있습니다.
nr_spd = name.replace('.', ' ', 1).split()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다