Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将二进制列表转换为字符列表(两个特殊字符)的最佳方法_Python_List_Dictionary_Zip - Fatal编程技术网

Python 将二进制列表转换为字符列表(两个特殊字符)的最佳方法

Python 将二进制列表转换为字符列表(两个特殊字符)的最佳方法,python,list,dictionary,zip,Python,List,Dictionary,Zip,我有这样一个特别的清单: [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']:

我有这样一个特别的清单:

[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:
浪费大量的内存。对于
n=22
all_compositions
列表包含超过400万个22项元组。直接迭代
product
的输出效率要高得多:

for binlist in itertools.product([0, 1], repeat=n):
在这方面:

joint_s2[nan_set[i]]='+' if binlist[i]=='0' else '-'
您可以针对字符串测试
binlist[i]
,但是
binlist
元组包含整数0和1,而不是字符串,Python不会自动将数字字符串转换为整数,反之亦然

另一个令人费解的部分是

nr=name.replace('.',' ')
nr_spd=re.split(' ',nr)
为什么要使用正则表达式?为什么不使用内置的
str.split
方法,例如

nr_spd = name.split('.')
OTOH,如果您的
名称
字段可能被一个或多个空格以及最多一个点分隔,那么您可以这样做

nr_spd = name.replace('.', ' ', 1).split()

你试过什么?到目前为止,您的代码是什么?我试图计算联合概率和条件概率。“+”意思是我应该计算1-p(x)的p(x)和“-”@elahe:问题不在于项目的目的是什么,而在于你自己在问题陈述中试图做些什么来解决这个问题。这不是我问的。你是如何解决这个问题的?另外,您真的想使用
map
函数,还是列表理解或
for
循环就足够了?不过,我怀疑我们这里有一个问题。对于这些概率计算,您真的不需要
'+'
'-'
的列表。谢谢您的回答。”tab'是一个包含概率的字典nan_set是所有变量的列表,“joint_s”是联合语句。我将编辑我的问题并添加它们。例如:A B C D。有更好的方法吗?不幸的是,我的程序非常慢…也许吧,但你正在处理很多组合。也许你应该问一个新问题,试着解释一下你在做什么。你可以在新问题中链接回这个问题,让人们知道这是一个后续问题。