Как добавить две строки по индексу - PullRequest
0 голосов
/ 27 апреля 2018

Я пробовал много раз, но не смог.

Вот пример:

print( concat_corresponding( "12345", "6789XYZ" ) )

Желаемый вывод:

162738495XYZ

Ответы [ 6 ]

0 голосов
/ 27 апреля 2018

Еще один способ сделать это:

def concat_corresponding(string1, string2):
    minimum, maximum = sorted([string1, string2], key=len)
    return "".join(string1[i]+string2[i] for i in range(len(minimum))) + maximum[len(minimum):]

print(concat_corresponding( "12345", "6789XYZ" )) 

Выход:

162738495XYZ   
0 голосов
/ 27 апреля 2018

Это один путь с itertools:

from itertools import chain, zip_longest

a = "12345"
b = "6789XYZ"

res = ''.join(list(chain.from_iterable(zip_longest(a, b, fillvalue=''))))

# '162738495XYZ'

Обратите внимание, что преобразование списка не требуется, но повышает производительность .

0 голосов
/ 27 апреля 2018

Я думаю, что это решение немного чище и использует аргумент ключевого слова fillvalue для itertools.zip_longest.

from itertools import zip_longest 

''.join(a+b for a, b in zip_longest(s1, s2, fillvalue=''))
0 голосов
/ 27 апреля 2018
from itertools import izip_longest
''.join(['%s%s' % (x ,y)\
         for x,y in izip_longest("12345","6789XYZ", fillvalue='')])

## Was: ''.join(['%s%s' % (x if x else '',y if y else '') \
##         for x,y in izip_longest("12345","6789XYZ")])

Чтобы немного разбить это:

  • встроенная функция zip () проникает только в самую короткую из двух последовательностей; поэтому мы используем izip_longest () из itertools стандартного библиотечного модуля
  • izip_longest () дополняет сгенерированные последовательности с помощью Нет по умолчанию; поэтому мы добавляем fillvalue = '' необязательный аргумент (ключевое слово)
  • Полученные подстроки просто объединяются, чтобы сформировать ваши результаты.
0 голосов
/ 27 апреля 2018

Вы можете вывести список из списка, присоединиться и заархивировать:

te1 = "12345"
te2 = "6789XYZ"

print (''.join( ''.join(x) for x in zip(te1,te2)) + (te1[len(te2):] if len(te1)>len(te2) else te2[len(te1):]))
                                                    # ^^^^ this part adds the remainer of longer list to result

выход:

162738495XYZ

https://docs.python.org/3/library/functions.html#zip

https://docs.python.org/3/library/stdtypes.html#str.join

Пояснение:

застегивает пары символов по позициям, остальные превращают список пар обратно в строку.

Zip работает только для более короткой строки - вы можете переключиться на itertools.zip_longest ( см. Ответ JimDennis ) или добавить часть более длинных списков (как я сделал здесь)

itertools.zip_longest (* iterables, fillvalue = None)

0 голосов
/ 27 апреля 2018

Это простой, но полезный

str1="12345"
str2="6789XYZ"
str3=""
i=0
for i, ch in enumerate(zip(str1, str2)):
    str3 += ch[0] + ch[1]

if len(str1) < len(str2):
    str3 += str2[i+1:]
else:
    str3 += str1[i+1:]
print(str3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...