Подтвердить что ты не робот

Как конкатенировать два элемента списка в Python?

У меня есть два списка, и я хочу объединить их по элементам. Один из списка подвергается форматированию строк перед конкатенацией.

Например:

a = [0, 1, 5, 6, 10, 11] 
b = ['asp1', 'asp1', 'asp1', 'asp1', 'asp2', 'asp2']

В этом случае a подвергается строчному форматированию. То есть новые a или aa должны быть:

aa = [00, 01, 05, 06, 10, 11]

Конечный вывод должен быть:

c = ['asp100', 'asp101', 'asp105', 'asp106', 'asp210', 'asp211']

Может кто-нибудь, пожалуйста, скажите мне, как это сделать?

4b9b3361

Ответ 1

Используйте zip:

>>> ["{}{:02}".format(b_, a_) for a_, b_ in zip(a, b)]
['asp100', 'asp101', 'asp105', 'asp106', 'asp210', 'asp211']

Ответ 2

Использование zip

[m+str(n) for m,n in zip(b,a)]

Выход

['asp10', 'asp11', 'asp15', 'asp16', 'asp210', 'asp211']

Ответ 3

Другое решение (предпочитает стиль форматирования printf поверх .format()), он также меньше:

>>> ["%s%02d" % t for t in zip(b, a)]
['asp100', 'asp101', 'asp105', 'asp106', 'asp210', 'asp211']

Ответ 4

не используется zip. Я не знаю, я думаю, что это очевидный способ сделать это. Может быть, я сначала научился C:)

c=[]
for i in xrange(len(a)):
    c.append("%s%02d" % (b[i],a[i]))

Ответ 5

b = ['asp1', 'asp1', 'asp1', 'asp1', 'asp2', 'asp2']
aa = [0, 1, 5, 6, 10, 11]
new_list =[]
if len(aa) != len(b):
     print 'list length mismatch'
else:
    for each in range(0,len(aa)):
        new_list.append(b[each] + str(aa[each]))
print new_list

Ответ 6

Чем можно сделать элегантно с картой и почтой:

map(lambda (x,y): x+y, zip(list1, list2))

Пример:

In [1]: map(lambda (x,y): x+y, zip([1,2,3,4],[4,5,6,7]))
Out[1]: [5, 7, 9, 11]