【问题标题】:combinations program help in python [closed]python中的组合程序帮助[关闭]
【发布时间】:2014-11-14 18:43:21
【问题描述】:

我正在努力实现一个算法,最后得到结果为 ['0', '0', '0', '-'] ['0', '0', '-', '0'] ['0', '-', '0', '1'] ['1', '0', '-', '1'] ['1', '1', '0', '-'] ['1', '-', '0', '1'] ['-', '0', '0', '1'] ['-', '1', '0', '1'] ['-', '-', '0', '1']

我想要的是替换每行中的“-”,如果其中有两个“-”,则用 0 或 1 以及 0 和 1 的组合替换它,并在 dict() 中给我结尾每个组合的该行的 base10 值。

这些字符串中此类“-”的数量根据用户输入是可变的,因此n个“-”的程序会有所帮助 如果不是因为这将帮助我找到逻辑。

【问题讨论】:

  • 到目前为止,您是否尝试过编写任何代码?你具体卡在哪里了?
  • 真的很难确定你想要的输出是什么
  • 能否也给出预期的输出???
  • 我的输出应该是 1: 0,1 2:0,2 3:1,5 4:9,11 5:12,13 6:9,13 7:1,9 8:5 ,13 9:1,5,9,13
  • 在每行中尝试所有 0 和 1 的组合,其中包含 '-'

标签: python algorithm combinations


【解决方案1】:

您的问题描述很难理解。根据您的 cmets,我猜对于您想要查找二进制值列表的每个列表,如果通配符 '-' 被替换为 1 或 0,数字可以描述。

方法如下:

def binvalues(s):
    if '-' in s:
        return (binvalues(s.replace('-', '0', 1))
            + binvalues(s.replace('-', '1', 1)))
    else:
        return [int(s, 2)]

def bindict(q):
    d = {}        
    for i, s in enumerate(q):
        d[i + 1] = binvalues("".join(s))

    return d

print bindict([
    ['0', '0', '0', '-'],
    ['0', '0', '-', '0'],
    ['0', '-', '0', '1'],
    ['1', '0', '-', '1'],
    ['1', '1', '0', '-'],
    ['1', '-', '0', '1'],
    ['-', '0', '0', '1'],
    ['-', '1', '0', '1'],
    ['-', '-', '0', '1']
])

函数bindict 处理列表的第一件事是将其转换为字符串。然后,您可以编写一个递归算法,将每个- 替换为0 和1(一次一个,因此replace 的第二个参数为1),并在没有通配符时返回一个包含单个数字的列表。转换函数int 采用可能的第二个参数,即基数。

【讨论】:

  • +1 表示答案中的第一句话。
  • 谢谢。我希望不是因为错字。
【解决方案2】:

好的,我已经完成了困难的部分,希望你能完成它:

tmp = []                                                                        
def recal(_list):                                                                    
    n = []                                                                      
        if '-' in _list:                                                                
        for i in 0,1:                                                           
            t = _list[:]                                                            
            t[t.index('-')] = i                                                 
            n.append(recall(t))                                                   
    else:                                                                       
        tmp.append(l)                                                           
        return l                                                                

recall(['-','-','0','1'])
for l in tmp:
    print int(''.join(l),2)

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多