Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I concatenate each element of different lists together?

Tags:

python

print(sgrades_flat)   
['Barrett', 'Edan', '70', '45', '59', 'Bradshaw', 'Reagan', '96', '97', '88', 'Charlton', 'Caius', '73', '94', '80', 'Mayo', 'Tyrese', '88', '61', '36', 'Stern', 'Brenda', '90', '86', '45']

print(s_grades)   
['F', 'A', 'B', 'D', 'C']

I want to combine sgrades_flat and s_grades to look like ...

['Barrett', 'Edan', '70', '45', '59', 'F',   
'Bradshaw', 'Reagan', '96', '97', '88', 'A'  
'Charlton', 'Caius', '73', '94', '80', 'B'   
'Mayo', 'Tyrese', '88', '61', '36', 'D'   
'Stern', 'Brenda', '90', '86', '45', 'C'] 

My current strategy is to use this code:

z=[]    
for i, x in zip(sgrades_flat[::5], s_grades):
  z.append(i+x)
print(z)

but that output is:

['BarrettF', 'BradshawA', 'CharltonB', 'MayoD', 'SternC']
like image 541
Surkles Avatar asked Jan 01 '26 23:01

Surkles


1 Answers

I would combine the list by iterating manually on them:

sgrades_flat=['Barrett', 'Edan', '70', '45', '59', 'Bradshaw', 'Reagan', '96', '97', '88', 'Charlton', 'Caius', '73', '94', '80', 'Mayo', 'Tyrese', '88', '61', '36', 'Stern', 'Brenda', '90', '86', '45']

s_grades=['F', 'A', 'B', 'D', 'C']

it1 = iter(sgrades_flat)
it2 = iter(s_grades)

result = []
try:
    while True:
        for _ in range(5):
            result.append(next(it1))
        result.append(next(it2))

except StopIteration:
    pass

print(result)

prints

['Barrett', 'Edan', '70', '45', '59', 'F', 
 'Bradshaw', 'Reagan', '96', '97', '88', 'A',
 'Charlton', 'Caius', '73', '94', '80', 'B',
 'Mayo', 'Tyrese', '88', '61', '36', 'D', 
 'Stern', 'Brenda', '90', '86', '45', 'C']

(this still looks like a bad idea as a flat list is sub-optimal for such a data structure)

Note that a one-liner without any manual iteration also does the same:

import itertools
grouped_sgrades = list(itertools.chain.from_iterable(
       sgrades_flat[i:i+5]+[s_grades[i//5]] 
       for i in range(0,len(sgrades_flat),5)))

however, why flatten the lists?

grouped_sgrades = [sgrades_flat[i:i+5]+[s_grades[i//5]] for i in range(0,len(sgrades_flat),5)]

result is a nice list of lists, which is approaching some structured data:

[['Barrett', 'Edan', '70', '45', '59', 'F'],
 ['Bradshaw', 'Reagan', '96', '97', '88', 'A'],
 ['Charlton', 'Caius', '73', '94', '80', 'B'],
 ['Mayo', 'Tyrese', '88', '61', '36', 'D'],
 ['Stern', 'Brenda', '90', '86', '45', 'C']]
like image 121
Jean-François Fabre Avatar answered Jan 03 '26 12:01

Jean-François Fabre



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!