2013-10-24 26 views
16

Ich habe zwei Listen und möchte sie elementweise verketten. Eine der Listen wird vor der Verkettung einer String-Formatierung unterzogen.Wie verketten elementweise zwei Listen in Python?

Zum Beispiel:

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

In diesem Fall wird auf a strang Formatierung unterzogen. Das heißt, neue a oder aa sollte sein:

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

Schluss ausgegeben werden soll:

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

Kann jemand bitte sagen Sie mir, wie das zu tun?

+0

versuchen, mit ['zip'] (http://docs.python.org/2/library/functions.html#zip) und [' string.format'] (http: // docs. python.org/2/library/string.html#format-specification-mini-language) –

+0

@FrancescoMontesano Danke, Antwort von Nightcracker funktioniert gut! – Sanchit

+0

@nightcracker Danke für die Antwort. Ja sicher. Aber ich kann deine Antwort gerade nicht akzeptieren. Es zeigt sich, dass man 5 Minuten warten muss. Dann werde ich das tun :) – Sanchit

Antwort

18

Verwendung zip:

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

@ downvoter - zu erklären, warum meine Antwort nicht nützlich ist? – orlp

+0

Kein Downvoter, nur Zuschauer, aber warum machst du sowohl String-Verkettung als auch String-Formatierung in "einer Anweisung"? Warum nicht nur '" {} {} ". Format (b_, a_)'? – dmedvinsky

+0

@dmedvinsky Absolut keinen Grund, lass mich bearbeiten - danke für den Vorschlag. – orlp

0

als elegant mit Karte und zip getan werden kann:

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

Beispiel:

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

es tut nicht, was das OP fragt –

+2

Nein, aber es ist das allgemeine Muster, ich denke, das ist wichtiger. –

1

nicht zip verwenden. Ich weiß nicht, ich denke, das ist der offensichtliche Weg, es zu tun. Vielleicht habe ich gelernt, C gerade noch :)

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

Reißverschluss Mit

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

Ausgang

['asp10', 'asp11', 'asp15', 'asp16', 'asp210', 'asp211'] 
1
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 
5

Andere Lösung (lieber printf Formatierungs Stil über .format() Nutzung), ist es auch kleiner:

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