Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: Merge list with range list

I have a list:

L = ['a', 'b']

I need to create a new list by concatenating an original list which range goes from 1 to k. Example:

k = 4
L1 = ['a1','b1', 'a2','b2','a3','b3','a4','b4']

I try:

l1 = L * k
print l1
#['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']

l = [ [x] * 2  for x in range(1, k + 1) ]
print l
#[[1, 1], [2, 2], [3, 3], [4, 4]]

l2 = [item for sublist in l for item in sublist]
print l2
#[1, 1, 2, 2, 3, 3, 4, 4]

print zip(l1,l2)
#[('a', 1), ('b', 1), ('a', 2), ('b', 2), ('a', 3), ('b', 3), ('a', 4), ('b', 4)]

print [x+ str(y) for x,y in zip(l1,l2)] 
#['a1', 'b1', 'a2', 'b2', 'a3', 'b3', 'a4', 'b4']

But I think it is very complicated. What is the fastest and most generic solution?

like image 464
jezrael Avatar asked Feb 19 '16 17:02

jezrael


People also ask

How do you combine ranges in python?

Python doesn't have a built-in function to merge the result of two range() output. However, we can still be able to do it. There is a module named 'itertools' which has a chain() function to combine two range objects.

How do you combine lists within a list python?

📢 TLDR: Use + In almost all simple situations, using list1 + list2 is the way you want to concatenate lists. The edge cases below are better in some situations, but + is generally the best choice. All options covered work in Python 2.3, Python 2.7, and all versions of Python 31.

How do I merge nested lists in python?

First, flatten the nested lists. Take Intersection using filter() and save it to 'lst3'. Now find elements either not in lst1 or in lst2, and save them to 'temp'. Finally, append 'temp' to 'lst3'.


1 Answers

You can use a list comprehension:

L = ['a', 'b']
k = 4
L1 = ['{}{}'.format(x, y) for y in range(1, k+1) for x in L]
print(L1)

Output

['a1', 'b1', 'a2', 'b2', 'a3', 'b3', 'a4', 'b4']
like image 153
gtlambert Avatar answered Oct 12 '22 19:10

gtlambert