【问题标题】:How to turn a string of letters into 3 letter words in Python 2.7.1如何在 Python 2.7.1 中将一串字母变成 3 个字母的单词
【发布时间】:2011-03-27 02:31:44
【问题描述】:

我有一串字母“aaabbbcccdddeeefffggg”,我想将其解读为 3 个字母的单词。例如'aaa','bbb','ccc'...

你知道有什么代码可以实现这个功能吗?

我的最终目标是为每个单词分配数字

aaa= 123
bbb= 234
ccc= 356 ...

并让输出是具有该值的句子中单词的位置

所以对于'aaabbbcccdddeeefffggg'的句子 三个字母的单词是'aaa','bbb','ccc'...

aaa 将是第一个位置 (1),bbb 将是第二个位置 (2),ccc 将是第三个位置 (3)

所以最终我会得到

(1,123),(2,234),(3,356) for 'aaa','bbb','ccc'

我已经尝试了几个小时,但我无法弄清楚如何做到这一点,所以非常感谢任何帮助

谢谢

【问题讨论】:

  • 如何为单词分配数字?字典?
  • 如果这不是字典,问题是我猜ggg = 789之后会发生什么
  • 问题不清楚。 “aabbbcdddefg”的结果应该是什么? [aab, bbc, ddd, efg] 或 [bbb, ddd]
  • 不,这不是家庭作业。 “aabbbcdddefg”的结果应该只是 [bbb,ddd] b/c 这些是唯一分配的。我想出了如何拆分成 3 个字母的单词并分配这些单词的值,但我现在的问题是有一个随机序列,比如你的“aabbbcdddefg”并且(因为 bbb 和 ddd 被分配了值 234 和 567)吐出“234” ,'567'

标签: python string list function word


【解决方案1】:

这样的?

data = 'aaabbbcccdddeeefffggg'
trans = {'aaa': 123, 'bbb': 234, 'ccc': 356, ...}
[(x + 1, trans[y * 3]) for x, y in enumerate(data[::3])]

否则:

def trans(c):
    a = ord('a')
    return ord(c) - a + 3 + 10 * (ord(c) - a + 2) + 100 * (ord(c) - a + 1)

data = 'aaabbbcccdddeeefffggg'
[(x + 1, trans(y)) for x, y in enumerate(data[::3])]

【讨论】:

    【解决方案2】:
    >>> a = "aaabbbcccdddeeefffggg"
    >>> [a[i:i+3] for i in range(0, len(a), 3)]
    ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
    

    【讨论】:

      【解决方案3】:
      >>> import re
      >>> re.findall(".{3}" ,"aaabbbcccdddeeefffggg")
      ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
      

      【讨论】:

        【解决方案4】:
        ch = 'bbbiiieeefffhhhaaacccddd'
        
        d = dict(zip(('aaa','bbb','ccc','ddd','eee','fff','ggg','hhh','iii'),
                     ('123','234','345','456','567','678','789','8910','91011')))
        
        def lect(x):
            gen = iter(x) 
            while True:
                yield ''.join((gen.next(),gen.next(),gen.next()))
        
        print [ (i+1,d[x]) for i,x in enumerate(lect(ch)) ]
        

        import re
        
        ch = 'bbbiiieeefffhhhaaacccddd'
        
        d = dict(zip(('aaa','bbb','ccc','ddd','eee','fff','ggg','hhh','iii'),
                     ('123','234','345','456','567','678','789','8910','91011')))
        
        pat = re.compile('|'.join(d.iterkeys()))
        
        print [ ((mat.start()/3)+1,d[mat.group()]) for mat in pat.finditer(ch) ]
        

        【讨论】:

          猜你喜欢
          • 2020-12-26
          • 2020-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多