Abhishek Jain
Abhishek Jain

Reputation: 630

Create a list of tuples from a list

I have a list as follows.

def getCols(x_):
    return [f'{x_}_{str(i).zfill(2)}_{str(j).zfill(2)}' for i in range(1, 6) for j in range(1, 13)]

a = getCols('abc')

I need the output to be:

out = [('abc_01_01', 'abc_01_02'), ('abc_01_02', 'abc_01_03'), ('abc_01_03', 'abc_01_04'), ('abc_01_04', 'abc_01_05') ('abc_01_05', 'abc_01_06'), ('abc_01_06', 'abc_01_07') ('abc_01_07', 'abc_01_08'), ('abc_01_08', 'abc_01_09') ('abc_01_09', 'abc_01_10'), ('abc_01_10', 'abc_01_11') ('abc_01_11', 'abc_01_12'),
('abc_02_01', 'abc_02_02'), ('abc_02_02', 'abc_02_03'), ('abc_02_03', 'abc_02_04'), ('abc_02_04', 'abc_02_05') ('abc_02_05', 'abc_02_06'), ('abc_02_06', 'abc_02_07') ('abc_02_07', 'abc_02_08'), ('abc_02_08', 'abc_02_09') ('abc_02_09', 'abc_02_10'), ('abc_02_10', 'abc_02_11') ('abc_02_11', 'abc_02_12')]

There are no combinations such as ('abc_01_12', 'abc_02_01') and ('abc_02_12', 'abc_03_01')

Upvotes: 0

Views: 63

Answers (3)

Rizquuula
Rizquuula

Reputation: 587

How about this,

def getCols(x_):
    max_i = 6
    max_j = 13
    return [(f'{x_}_{str(i).zfill(2)}_{str(j).zfill(2)}', f'{x_}_{str(i).zfill(2)}_{str(j+1).zfill(2)}') for i in range(1, max_i) for j in range(1, max_j) if j < max_j - 1]

Or

def getCols(x_):
    max_i = 6
    max_j = 13
    out = []
    for i in range(1, max_i):
        for j in range(1, max_j):
            if j < max_j - 1:
                out.append((f'{x_}_{str(i).zfill(2)}_{str(j).zfill(2)}', f'{x_}_{str(i).zfill(2)}_{str(j+1).zfill(2)}'))
    
    return out

a = getCols('abc')

Upvotes: 1

leaf_soba
leaf_soba

Reputation: 2518

  • you can use zip to do it

code:

def getCols(x_):
    return [f'{x_}_{str(i).zfill(2)}_{str(j).zfill(2)}' for i in range(1, 6) for j in range(1, 13)]

a = getCols('abc')
print([(x,y) for x,y in zip(a,a[1:])])

result:

[('abc_01_01', 'abc_01_02'), ('abc_01_02', 'abc_01_03'), ('abc_01_03', 'abc_01_04'), ('abc_01_04', 'abc_01_05'), ('abc_01_05', 'abc_01_06'), ('abc_01_06', 'abc_01_07'), ('abc_01_07', 'abc_01_08'), ('abc_01_08', 'abc_01_09'), ('abc_01_09', 'abc_01_10'), ('abc_01_10', 'abc_01_11'), ('abc_01_11', 'abc_01_12'), ('abc_01_12', 'abc_02_01'), ('abc_02_01', 'abc_02_02'), ('abc_02_02', 'abc_02_03'), ('abc_02_03', 'abc_02_04'), ('abc_02_04', 'abc_02_05'), ('abc_02_05', 'abc_02_06'), ('abc_02_06', 'abc_02_07'), ('abc_02_07', 'abc_02_08'), ('abc_02_08', 'abc_02_09'), ('abc_02_09', 'abc_02_10'), ('abc_02_10', 'abc_02_11'), ('abc_02_11', 'abc_02_12'), ('abc_02_12', 'abc_03_01'), ('abc_03_01', 'abc_03_02'), ('abc_03_02', 'abc_03_03'), ('abc_03_03', 'abc_03_04'), ('abc_03_04', 'abc_03_05'), ('abc_03_05', 'abc_03_06'), ('abc_03_06', 'abc_03_07'), ('abc_03_07', 'abc_03_08'), ('abc_03_08', 'abc_03_09'), ('abc_03_09', 'abc_03_10'), ('abc_03_10', 'abc_03_11'), ('abc_03_11', 'abc_03_12'), ('abc_03_12', 'abc_04_01'), ('abc_04_01', 'abc_04_02'), ('abc_04_02', 'abc_04_03'), ('abc_04_03', 'abc_04_04'), ('abc_04_04', 'abc_04_05'), ('abc_04_05', 'abc_04_06'), ('abc_04_06', 'abc_04_07'), ('abc_04_07', 'abc_04_08'), ('abc_04_08', 'abc_04_09'), ('abc_04_09', 'abc_04_10'), ('abc_04_10', 'abc_04_11'), ('abc_04_11', 'abc_04_12'), ('abc_04_12', 'abc_05_01'), ('abc_05_01', 'abc_05_02'), ('abc_05_02', 'abc_05_03'), ('abc_05_03', 'abc_05_04'), ('abc_05_04', 'abc_05_05'), ('abc_05_05', 'abc_05_06'), ('abc_05_06', 'abc_05_07'), ('abc_05_07', 'abc_05_08'), ('abc_05_08', 'abc_05_09'), ('abc_05_09', 'abc_05_10'), ('abc_05_10', 'abc_05_11'), ('abc_05_11', 'abc_05_12')]

Upvotes: 0

Park
Park

Reputation: 384

Why don't you just make a column list directly?

def getCols(x_):
    return [(f'{x_}_{str(i).zfill(2)}_{str(j).zfill(2)}', f'{x_}_{str(i).zfill(2)}_{str(j + 1).zfill(2)}')  for i in range(1, 6) for j in range(1, 12)]

Upvotes: 0

Related Questions