为字符串的子字符串中的每个字符添加索引

时间:2017-07-29 21:09:36

标签: python substring indices

我正在编写一个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有没有办法可以做到这一点而不必编辑太多的现有代码?

2 个答案:

答案 0 :(得分:0)

由于您已经拥有该功能,我只需更改传递给它的输入:

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']

答案 1 :(得分:0)

我认为您想要的可以按如下方式处理:

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']