【问题标题】:How to use Python slice to extract a list of positions in a string如何使用 Python 切片提取字符串中的位置列表
【发布时间】:2011-04-18 23:56:01
【问题描述】:

我有两个字符串:

a='1234512345'

b='abcdefghik'

我想在字符串“a”中搜索“1”的出现,然后打印与该索引对应的“b”的位置,即

'af'

我可以使用

import re

starts=[match.start() for match in re.finditer(re.escape('1'), a)]

发现'1'出现在位置[0,5]。我将如何使用此信息从字符串“b”中提取“af”

【问题讨论】:

    标签: python string indexing


    【解决方案1】:

    你可以这样做:

    ''.join(b[x] for x in starts)
    

    但我会推荐这个:

    a='1234512345'
    b='abcdefghik'
    
    ''.join(y for (x, y) in zip(a, b) if x == '1')
    

    【讨论】:

      【解决方案2】:
      >>> a='1234512345'
      >>> b='abcdefghik'
      >>> [ j for i,j in zip(a,b) if i=="1" ]
      ['a', 'f']
      

      【讨论】:

      • @kurumu:list 是多余的,因为 zip 已经对其进行了迭代 :)
      【解决方案3】:
      In [11]: a='1234512345'    
      In [12]: b='abcdefghik'
      
      In [16]: ''.join(b[i] for i,num in enumerate(a) if num=='1')
      Out[16]: 'af'
      

      或者,如果你真的想使用正则表达式:

      In [21]: ''.join(b[match.start()] for match in re.finditer(re.escape('1'), a))
      Out[21]: 'af'
      

      【讨论】:

        【解决方案4】:
        import re
        a='1234512345'
        
        b='abcdefghik'
        
        starts= [ b[i] for i in [ match.start() for match in re.finditer(re.escape('1'), a)]]
        print ''.join(starts)
        

        【讨论】:

          【解决方案5】:
          "".join(b[i] for i in range(min(len(a), len(b))) if a[i] == "1")
          

          【讨论】:

            【解决方案6】:

            喜欢这样吗?

            a='1234512345'
            
            b='abcdefghik'
            
            for char in a:
                n = -1
                for subc in a:
                    n=n+1
                    if subc == char:
                        print b[n],
                print
            

            产生:

            a f
            b g
            c h
            d i
            e k
            a f
            b g
            c h
            d i
            e k
            

            【讨论】:

              【解决方案7】:

              如果您必须对a 的几个值重复此操作,那么构建字典将比重复循环遍历ab 更有效((O(n)) *n))

              >>> a='1234512345'
              >>> b='abcdefghik'
              >>> from collections import defaultdict
              >>> D=defaultdict(str)
              >>> for i,j in zip(a,b):
              ...  D[i]+=j
              ... 
              >>> D['1']
              'af'
              >>> D['2']
              'bg'
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-10-24
                • 1970-01-01
                • 2021-03-18
                • 1970-01-01
                • 2023-04-09
                • 2019-03-14
                • 1970-01-01
                • 2021-03-12
                相关资源
                最近更新 更多