2016-11-23 1 views
1

Я пытаюсь выяснить, как закрепить две строки разной длины в одну строку, чередуя символы и сохраняя оставшиеся символы в более длинной строке. Пример:Как zip 2 строки в новую строку в python

a = '12345' 
b = 'abcdefgh' 

Я попытался zip(a,b), но он возвращает список кортежей и отрежет, когда не равные строки длины:

[('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', 'd'), ('5', 'e')] 

мне нужно, чтобы получить только новую строку из. Пример:

result = 1a2b3c4d5efgh 

Как это можно сделать?

+0

не могли бы вы просто использовать цикл for? Начиная с позиции 0 каждого и добавляя каждую букву на третью новую строку. Пусть i и k - длины двух строк. – Bridger

ответ

1

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

''.join(''.join(x) for x in zip(a,b)) 

Хотя, zip() всегда остановится агрегирование, когда самая короткая beween a и b концами (1a2b3c4d5e в вашем примере). Если вы хотите, чтобы добраться до конца самой длинной строки ввода вы должны повторять их по-разному, например:

c = [] 
for x in range(max(len(a),len(b))): 
    c.append(a[x] if x < len(a) else '') 
    c.append(b[x] if x < len(b) else '') 
result=''.join(c) 

Или, как это было предложено Мойнуддин ниже, используя izip_longest:

''.join(''.join(x) for x in izip_longest(a, b, fillvalue='')) 
+0

как бы вы это получили, чтобы сохранить оставшиеся символы в большой строке – smitty

+0

@smitty - я отредактировал ответ. если вы хотите сохранить конец, zip не подходит ... – Pintun

+1

@smitty В этом случае используйте 'itertools.izip_longest()' он заполнит значения меньшего списка 'None' –

 Смежные вопросы

  • Нет связанных вопросов^_^