Mathias
Mathias

Reputation: 648

Merge 3 corresponding items in 3 lists

I have 3 lists of the same length.

L1=[1,2,3,4,5,6]
L2=['a','b','c','d','e','f']
L3=[A,B,C,D,E,F]

I tried a lot of things, but nothing seems to work.

How can I get it out like:

L4=[1aA, 2bB, 3cC, 4dD, 5eE, 6fF]

Thanks in advance. Sorry I supply any code right, but I should be out the door already.

UPDATE:

Here's a little update. I dont know if it changes much. The solution suggested firstly worked fine. The lists I have:

noHit = ['Aeculus hippocastaneum', 'Angelica sylvetris', 'Ilex aguifolium', 'Majanthemum bifolium', 'Carduus palustre', 'Valeriana Sambucifolia', 'Betula pusbescens', 'Stellaria nemorum ssp. nemorum', 'Pteridium aquilinium', 'Dryopteris delatata', 'Equisetum Hyemale', 'Equisetum Sylvaticum', 'Vicia Sepium', 'Quercus rubra', 'Fagus Sylvatica', 'Geranium robertisianum', 'Hypochoeris radicata', 'Stellaria crassifolia', 'Abies alba', 'Holcus Lanatus', 'Deschampsia caespitosa', 'Holcus Mollis', 'Milium Effusum', 'Prunus. serutina', 'Rubus sect. corylifolli', 'Rubus Sect. caesii', 'Salix intermedia', 'Prunus ceracifera', 'Uplandicum nyman', 'Salix ssp.', 'Salix smithiana', 'Scophularia nodosa', 'Juncus coriglomeratus']

arrows = [' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ', ' ------> ']

badSpelling = [['Aesculus hippocastanum'], ['Angelica sylvestris'], ['Ilex aquifolium'], ['Maianthemum bifolium'], ['Cirsium palustre'], ['Valeriana dioica'], ['Betula pubescens'], ['Stellaria nemorum'], ['Pteridium aquilinum'], ['Dryopteris dilatata'], ['Equisetum hyemale'], ['Equisetum sylvaticum'], ['Vicia sepium'], ['Quercus robur'], ['Fagus sylvatica'], ['Geranium robertianum'], ['Hypochaeris radicata'], ['Stellaria pallida'], ['Arabis scabra'], ['Holcus lanatus'], ['Deschampsia cespitosa'], ['Holcus mollis'], ['Milium effusum'], ['Prunus spinosa'], ['Rubus spectabilis'], ['Rubus caesius'], ['Salix cinerea'], ['Prunus cerasifera'], ['Sparganium natans'], ['Salix repens'], ['Salix triandra'], ['Scrophularia nodosa'], ['Juncus conglomeratus']]

Now I wanna print it out like:

Aeculus hippocastanum ----> Aesculus hippocastanum

And write that part to a txt file. And it works well using

holder=[]
holder = [a+b+str(c) for a,b,c in zip(noHits,arrowList,close)]
filnavnUdNHC = 'art NHC.txt'    
f3 = open(filnavnUdNHC, 'w')
for hold in holder:
    f3.write(hold)
    f3.write('\n')

Except that it writes like:

Aeculus hippocastaneum ------> ['Aesculus hippocastanum']
Angelica sylvetris ------> ['Angelica sylvestris']
Ilex aguifolium ------> ['Ilex aquifolium']

Which in fine enough, but not really great. And it, thanks for the answers, gives me a hard time iterating through it since the lists are different.

UPDATE:

Solved it like:

test=[]
led=''
ll=''
i=0
for noHit in noHits:
    led=(str(noHit)+' -----> ')
    ll=''.join(close[i])
    led = led+ll
    test.append(led)
    i += 1
    print led

Its ugly, but it works. If you have any workarounds, please post for better learning :)

Upvotes: 1

Views: 151

Answers (4)

F1Rumors
F1Rumors

Reputation: 948

Another variation on the same theme - more concise and generic, perhaps:

[''.join(map(str,l)) for l in zip(L1,L2,L3)]

Upvotes: 0

John La Rooy
John La Rooy

Reputation: 304137

>>> L1 = [1,2,3,4,5,6]                                          
>>> L2 = ['a','b','c','d','e','f']                              
>>> L3 = ['A','B','C','D','E','F']          
>>> ["{}{}{}".format(*i) for i in zip(L1, L2, L3)]
['1aA', '2bB', '3cC', '4dD', '5eE', '6fF']

On Python2, you can also use map

>>> map("{}{}{}".format, L1, L2, L3)
['1aA', '2bB', '3cC', '4dD', '5eE', '6fF']

Upvotes: 2

m.wasowski
m.wasowski

Reputation: 6387

This should work for you:

[''.join(triple) for triple in zip(map(str, L1), L2, L3)]

How does it work?

First you need to change elements of your first list from integer to string representation. You can do this using map function with str().

Then, you can use use zip() create 3-element lists from corresponding elements.

Finally, you can use list comprehension and join to construct single string from each triple.

Upvotes: 0

Ashoka Lella
Ashoka Lella

Reputation: 6729

L1 = [1,2,3,4,5,6]                                          
L2 = ['a','b','c','d','e','f']                              
L3 = ['A','B','C','D','E','F']                              
L4 = [str(a)+b+c for a,b,c in zip(L1,L2,L3)]
print L4

output

['1aA', '2bB', '3cC', '4dD', '5eE', '6fF']

Upvotes: 3

Related Questions