#python #string #list
#python #строка #Список
Вопрос:
Я хочу повторить каждый символ в моей строке на число, которое у меня есть в массиве, т. Е. если
rep = [1, 0, 1, 1, 3, 0, 0, 1, 0]
seq = 'AATCGGGAA'
Я хочу что-то вроде
seq*rep
для вывода
ATCGGGA
Ответ №1:
Вы можете использовать zip
, понимание списка и str.join
:
>>> rep = [1, 0, 1, 1, 3, 0, 0, 1, 0]
>>> seq = 'AATCGGGAA'
>>>
>>> list(zip(seq, rep)) # zip pairs up the items in the two lists
[('A', 1), ('A', 0), ('T', 1), ('C', 1), ('G', 3), ('G', 0), ('G', 0), ('A', 1), ('A', 0)]
>>>
>>> ''.join([x*y for x,y in zip(seq, rep)])
'ATCGGGA'
>>>
Ответ №2:
Самым быстрым способом сделать это будет использование map
с operator.mul
:
>>> from operator import mul
>>> ''.join(map(mul, seq, rep))
'ATCGGGA'
Комментарии:
1. Что вы подразумеваете под самым быстрым, то есть наиболее эффективным? наименьшее количество нажатий клавиш?
2. Хорошая находка! Я ценю разнообразие ответов, которые можно получить от SO
3. Итак, какой из них выигрывает, если вы пользователь
itertools.izip()
(или просто обычныйzip
в python 3)?
Ответ №3:
Это должно сработать:
"".join([s*r for r, s in zip(rep, seq)])
Вывод:
"ATCGGGA"
Комментарии:
1. @iCodez опередил вас в этом 🙂 хотя спасибо за ответ