13

I'm looking for solution to my problem. At the moment I have two list of elements:

column_width = ["3", "3", "6", "8", "4", "4", "4", "4"]
fade = ["100", "200", "300"]

What I want to achieve is to create for loop which wil give me following output:

column-3-fade-100
column-3-fade-200
column-6-fade-300
column-8-fade-100
column-4-fade-200
...

Nested for loop doen't work for me:

for i in fade:
    for c in column_width_a:
        print("column-{0}-fade-{1}".format(c, i))

Is there any other way to generate this output?

imperato
  • 329
  • 2
  • 12
  • As a side note, starting with [Python 3.6](https://docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals) you can use [formatted string literals](https://docs.python.org/3/reference/lexical_analysis.html#f-strings) aka f-strings from [PEP 498](https://www.python.org/dev/peps/pep-0498/), which means your printing code becomes `print(f"column-{c}-fade-{i}")` – Cristian Ciupitu Nov 21 '19 at 12:27

2 Answers2

16

This is one approach using itertools.cycle.

Ex:

from itertools import cycle

column_width = ["3", "3", "6", "8", "4", "4", "4", "4"]
fade = cycle(["100", "200", "300"])

for i in column_width:
    print("column-{}-fade-{}".format(i, next(fade)))

Output:

column-3-fade-100
column-3-fade-200
column-6-fade-300
column-8-fade-100
column-4-fade-200
column-4-fade-300
column-4-fade-100
column-4-fade-200
Cristian Ciupitu
  • 20,270
  • 7
  • 50
  • 76
Rakesh
  • 81,458
  • 17
  • 76
  • 113
3

Try:

from itertools import cycle
print('\n'.join("column-{}-fade-{}".format(x, y) for x, y in zip(column_width, cycle(fade))))
U13-Forward
  • 69,221
  • 14
  • 89
  • 114