简体   繁体   中英

How to append a new index to a 2D array using list comprehension?

I have a 2D array containing 15 jobs, each job (index) consisting of a list of 3 items (workerA, workerB, workerC). Created by these lines:

letters = ["A","B","C"]
jobs = [[("job_%s_worker%s" % (i, letters[j])) for j in range(3)] for i in range(1,16)]

I want to add a new index to each inner list using list comprehension but don't know how. It can be done with a simple for loop:

for i in range(15):
    jobs[i].append(i+1)

Output:

>>> jobs
>>> [['job_1_workerA', 'job_1_workerB', 'job_1_workerC', 1], 
['job_2_workerA', 'job_2_workerB', 'job_2_workerC', 2], 
['job_3_workerA', 'job_3_workerB', 'job_3_workerC', 3], 
['job_4_workerA', 'job_4_workerB', 'job_4_workerC', 4], 
['job_5_workerA', 'job_5_workerB', 'job_5_workerC', 5], 
['job_6_workerA', 'job_6_workerB', 'job_6_workerC', 6], 
['job_7_workerA', 'job_7_workerB', 'job_7_workerC', 7], 
['job_8_workerA', 'job_8_workerB', 'job_8_workerC', 8], 
['job_9_workerA', 'job_9_workerB', 'job_9_workerC', 9], 
['job_10_workerA', 'job_10_workerB', 'job_10_workerC', 10], 
['job_11_workerA', 'job_11_workerB', 'job_11_workerC', 11], 
['job_12_workerA', 'job_12_workerB', 'job_12_workerC', 12], 
['job_13_workerA', 'job_13_workerB', 'job_13_workerC', 13], 
['job_14_workerA', 'job_14_workerB', 'job_14_workerC', 14], 
['job_15_workerA', 'job_15_workerB', 'job_15_workerC', 15]]

Any ideas?

Here is one way to do so:

letters = ["A","B","C"]
jobs = [[("job_%s_worker%s" % (i, letters[j])) for j in range(3)] + [i] for i in range(1,16)]
print(jobs)

Output:

[['job_1_workerA', 'job_1_workerB', 'job_1_workerC', 1], ['job_2_workerA', 'job_2_workerB', 'job_2_workerC', 2], ['job_3_workerA', 'job_3_workerB', 'job_3_workerC', 3], ['job_4_workerA', 'job_4_workerB', 'job_4_workerC', 4], ['job_5_workerA', 'job_5_workerB', 'job_5_workerC', 5], ['job_6_workerA', 'job_6_workerB', 'job_6_workerC', 6], ['job_7_workerA', 'job_7_workerB', 'job_7_workerC', 7], ['job_8_workerA', 'job_8_workerB', 'job_8_workerC', 8], ['job_9_workerA', 'job_9_workerB', 'job_9_workerC', 9], ['job_10_workerA', 'job_10_workerB', 'job_10_workerC', 10], ['job_11_workerA', 'job_11_workerB', 'job_11_workerC', 11], ['job_12_workerA', 'job_12_workerB', 'job_12_workerC', 12], ['job_13_workerA', 'job_13_workerB', 'job_13_workerC', 13], ['job_14_workerA', 'job_14_workerB', 'job_14_workerC', 14], ['job_15_workerA', 'job_15_workerB', 'job_15_workerC', 15]]

The + operator concatenate the two lists into one.


If the list is already created, you can add the corresponding index using enumerate() :

jobs = [element + [i] for i, element in enumerate(jobs, start=1)]

Note:

You can slightly improve your list comprehension by iterating directly over letters .

jobs = [[("job_%s_worker%s" % (i, char)) for char in letters] + [i] for i in range(1,16)]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM