简体   繁体   中英

How can I print strings in a list by the number in a different list, on different lines depending on a third list?

For example, given:

On_A_Line = [2,2,3]

Lengths_Of_Lines = [5,2,4,3,2,3,2]

Characters = ['a','t','i','e','u','w','x']

I want it to print:

aaaaatt    
iiiieee    
uuwwwxx

So far I have tried:

iteration = 0

for number in Lengths_Of_Lines:

  s = Lengths_Of_Lines[iteration]*Characters[iteration]

  print(s, end = "")

  iteration += 1

which prints what I want without the line spacing:

aaaaattiiiieeeuuwwwxx

I just don't have the python knowledge to know what to do from there.

Solution using a generator and itertools:

import itertools

def repeat_across_lines(chars, repetitions, per_line):
    gen = ( c * r for c, r in zip(chars, repetitions) )
    return '\n'.join(
        ''.join(itertools.islice(gen, n))
        for n in per_line
    )

Example:

>>> repeat_across_lines(Characters, Lengths_Of_Lines, On_A_Line)
'aaaaatt\niiiieee\nuuwwwxx'
>>> print(_)
aaaaatt
iiiieee
uuwwwxx

The generator gen yields each character repeated the appropriate number of times. These are joined together n at a time with itertools.islice , where n comes from per_line . Those results are then joined with newline characters. Because gen is a generator, the next call to islice yields the next n of them that haven't been consumed yet, rather than the first n .

You need to loop over the On_A_Line list. This tells you have many iterations of the inner loop to perform before printing a newline.

iteration = 0
for count in On_A_Line:
    for _ in range(count):
        s = Lengths_Of_Lines[iteration]*Characters[iteration]
        print(s, end = "")
        iteration += 1
    print("") # Print newline

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