Как использовать фрагмент Python для извлечения списка позиций в строке - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть две строки:

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]. Как бы я использовал эту информацию для извлечения 'af' из строки "b"

Ответы [ 7 ]

1 голос
/ 19 апреля 2011
>>> a='1234512345'
>>> b='abcdefghik'
>>> [ j for i,j in zip(a,b) if i=="1" ]
['a', 'f']
1 голос
/ 19 апреля 2011

Вы можете сделать что-то вроде этого:

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

Но я бы порекомендовал это вместо:

a='1234512345'
b='abcdefghik'

''.join(y for (x, y) in zip(a, b) if x == '1')
0 голосов
/ 19 апреля 2011

Если вам придется повторить это для нескольких значений a, будет более эффективно ((O (n)) построить словарь, чем циклически повторять a и b (O (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'
0 голосов
/ 19 апреля 2011

как это?

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
0 голосов
/ 19 апреля 2011
"".join(b[i] for i in range(min(len(a), len(b))) if a[i] == "1")
0 голосов
/ 19 апреля 2011
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)
0 голосов
/ 19 апреля 2011
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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...