简体   繁体   中英

Iterate over two lists and combining items

I want to iterate over and combine items from two lists. but it has to start with item 1 from list 1 and iterate through and combine with all items in list 2.

partner_paths = ["/partner/path/1", "/partner/path/2", "/partner/path/3"]
scr_dirs = ["/dir1", "/dir2", "/dir3"]

for p_path, s_dir in zip(partner_paths, scr_dirs):
    fpath = p_path + s_dir
    print fpath

What I want is:

"/partner/path/1/dir1" "/partner/path/1/dir2" "/partner/path/1/dir3"

"/partner/path/2/dir1" "/partner/path/2/dir2" "/partner/path/2/dir3"

"/partner/path/3/dir1" "/partner/path/3/dir2" "/partner/path/3/dir3"

You can use itertools.product with a list comprehension if you need the result in a list:

from itertools import product
[d + f for d, f in product(partner_paths, scr_dirs)]

#['/partner/path/1/dir1',
# '/partner/path/1/dir2',
# '/partner/path/1/dir3',
# '/partner/path/2/dir1',
# '/partner/path/2/dir2',
# '/partner/path/2/dir3',
# '/partner/path/3/dir1',
# '/partner/path/3/dir2',
# '/partner/path/3/dir3']

Or as @vaultah suggested, this should work as well:

[p + d for p in partner_paths for d in scr_dirs]

Is double for loop out of the question?

for p_path in partner_paths:
    for s_dir in scr_dirs:
       fpath = p_path + s_dir
       print fpath

If you wanted a 2D output, this code should work as well:

final_output = []
for p_path in partner_paths:
  paths = []
  for s_dir in scr_dirs:
    fpath = p_path + s_dir
    paths.append(fpath)
  output_list.append(paths)

print (final_output)
partner_paths = ["/partner/path/1", "/partner/path/2", "/partner/path/3"]
scr_dirs = ["/dir1", "/dir2", "/dir3"]
fpath = []
for p_path in partner_paths:
    for s_dir in scr_dirs:
        fpath.append(p_path + s_dir)

print(fpath)

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