【问题标题】:Adding indices to each character in a substring of a string为字符串的子字符串中的每个字符添加索引
【发布时间】:2018-01-05 17:43:51
【问题描述】:

我正在编写一个 Python 程序,以使用 itertools 生成给定输入字符串的所有可能子字符串。

def substring_generator(seq):
    substring_list = list(seq)
    return chain.from_iterable(combinations(substring_list, r) for r in range(len(seq) + 1)) 
print list(map(''.join, substring_generator('LLRR')))

输出['', 'L', 'L', 'R', 'R', 'LL', 'LR', 'LR', 'LR', 'LR', 'RR', ' LLR'、'LLR'、'LRR'、'LRR'、'LLRR']。 但我想知道如何输出子字符串中每个字符的索引,例如seq = L0L1R2R3 子字符串将是 L0R2 或 L1R2R3 有什么方法可以做到这一点而不必编辑太多现有代码?

【问题讨论】:

  • “R1”从何而来?
  • I 函数没有返回正确的结果。字符串'L0R2R3' 不是'L0L1R2R3' 的子字符串。这是seq子集'LLRR'的正确子串列表是['', 'L', 'L', 'R', 'R', 'LL', 'LR', 'RR', 'LLR', 'LRR', 'LLRR']

标签: python substring indices


【解决方案1】:

既然你已经有了这个函数,我会简单地改变传递给它的输入:

substring_generator([c+str(i) for i, c in enumerate('LLRR')])

完整代码:

def substring_generator(seq):
    substring_list = list(seq)
    return chain.from_iterable(combinations(substring_list, r) for r in range(len(seq) + 1)) 
print list(map(''.join, substring_generator([c+str(i) for i, c in enumerate('LLRR')])))
# output: ['', 'L0', 'L1', 'R2', 'R3', 'L0L1', 'L0R2', 'L0R3', 'L1R2', 'L1R3', 'R2R3', 'L0L1R2', 'L0L1R3', 'L0R2R3', 'L1R2R3', 'L0L1R2R3']

【讨论】:

    【解决方案2】:

    我认为你想要的可以如下处理:

    def substring_generator(seq):
        substring_list = list(seq)
        return chain.from_iterable(combinations(substring_list, r) for r in range(len(seq) + 1)) 
    print  list(map(''.join, substring_generator('LLRR'))) 
    print  list(map(''.join, substring_generator('0112'))) 
    

    给予:

    ['', 'L', 'L', 'R', 'R', 'LL', 'LR', 'LR', 'LR', 'LR', 'RR', 'LLR', 'LLR', 'LRR', 'LRR', 'LLRR']
    ['', '0', '1', '1', '2', '01', '01', '02', '11', '12', '12', '011', '012', '012', '112', '0112']
    

    只是垂直查看列还是要合并字符串?


    更新以包含合并:

    a = list(map(''.join, substring_generator('LLRR'))) 
    b = list(map(''.join, substring_generator('0112'))) 
    
    def f1(s,v):
      t = ''
      for i in range( len(s)  ):
        t += s[i] + v[i]
      return t
    
    print [f1(x,y) for x,y in zip(a,b)]
    

    给出输出:

    ['', 'L0', 'L1', 'R1', 'R2', 'L0L1', 'L0R1', 'L0R2', 'L1R1', 'L1R2', 'R1R2', 'L0L1R1', 'L0L1R2', 'L0R1R2', 'L1R1R2', 'L0L1R1R2']
    

    【讨论】:

    • 我想合并字符串,所以每个 'L' 或 'R' 的右侧都是索引
    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多