Home > Software design >  Iterating over nested for loop
Iterating over nested for loop

Time:10-04

I am trying to iterate over multiple collections of values and the code is performing as expected except I would like to iterate over each account_id once, instead of multiple times for each reach.

Essentially I want each region to correlate with a single account_id. YUL > 11111111111; iad > 11111111222; gru > 99111111111.

For example here's my code below.

buildings = [i for i in range(1,90)]
regions = ['yul', 'iad', 'gru']
accounts = ['11111111111', '11111111222', '99111111111']

def testing(buildings, regions):
    accountIdx = -1
    for account in accounts:          
        if accountIdx < 0:
            print('First iteration')
        accountIdx  = 1
        curr_account = accounts[accountIdx] # Counter variable   after each iteration
        print(curr_account)
        for region in regions:               
            for building in buildings:
               print('%s%s in account:%s'%(region, building,curr_account))

This is what I would like. It has the same thing for accounts 11111111222 and 99111111111 too.

Current Output: iad**<1-89>** in account:11111111111 
                gru**<1-89>** in account: 11111111111
                yul**<1-89>** in account: 11111111111





Expected Output: iad**<1-89>** in account:11111111111 
                 gru**<1-89>** in account: 11111111222
                 yul**<1-89>** in account: 99111111111

I would like the output to be like this above, with each region correlating with a single account_id, instead of iterating over each region with the SAME account Id.

Does anyone know how this solution can be achieved?

CodePudding user response:

you can use zip to bind the corresponding index of list together and achive your solution

# your code goes here
buildings = [i for i in range(1,90)]
regions = ['yul', 'iad', 'gru']
accounts = ['11111111111', '11111111222', '99111111111']

def testing(buildings, regions):

    for account, building, region in zip(accounts, buildings, regions):
               print('%s%s in account:%s'%(region, building, account))
          
testing(buildings, regions)

CodePudding user response:

Use zip

    buildings = [i for i in range(1,90)]
    regions = ['yul', 'iad', 'gru']
    accounts = ['11111111111', '11111111222', '99111111111']
    
    for region, curr_account in zip(regions,accounts):
        print(f"{region} {building}  in account: {curr_account}")

Each region corresponds to an account by the order, they are positioned in the lists.
yul : 11111111111
iad : 11111111222
gru : 11111111222

  • Related