How do I print this list vertically?

后端 未结 5 1482
猫巷女王i
猫巷女王i 2020-12-11 19:21

Let\'s say I have this list of asterisks, and I say it to print this way:

list = [\'* *\', \'*\', \'* * *\', \'* * * * *\', \'* * * * * *\', \'* * * *\']
for         


        
相关标签:
5条回答
  • 2020-12-11 19:49

    How about this, for a version that mostly uses basic Python operations:

    data = ['* *', '*', '* * *', '* * * * *', '* * * * * *', '* * * *']
    max_len = max(len(x) for x in data)  # find the longest string
    
    for i in range(0, max_len, 2):       # iterate on even numbered indexes (to get the *'s)
        for column in data:              # iterate over the list of strings
            if i < len(column):
                print column[i],         # the comma means no newline will be printed
            else:
                print " ",               # put spaces in for missing values
        print                            # print a newline at the end of each row
    

    Example output:

    * * * * * *
    *   * * * *
        * * * *
          * * *
          * *  
            *  
    
    0 讨论(0)
  • 2020-12-11 19:56

    If you don't want to import itertools, you can do it like this:

    ell = ['* *', '*', '* * *', '* * * * *', '* * * * * *', '* * * *']
    unpadded_ell = [s.replace(' ', '') for s in ell]
    height = len(max(unpadded_ell))
    for s in zip(*(s.ljust(height) for s in unpadded_ell)):
        print(' '.join(s))
    

    Note a couple of things:

    1. I have renamed the list to ell, since list is a built-in word in python.
    2. This works by expanding the strings so that they all have the same length by padding them with spaces, then converting the list of strings into a list of lists representing a rectangular matrix.
    3. I have used the trick described in this post to do a matrix transpose, which is what you want to print. It uses zip, which is a builtin function for "combining" iterables like lists.
    4. I also used a couple of comprehensions to keep things short.
    5. This works in python 2 and 3. If you want it to look more like python 2, take out the parentheses used for the print function.
    0 讨论(0)
  • 2020-12-11 20:00
    >>> from itertools import izip_longest
    >>> list_ = ['a', 'bc', 'def']
    >>> for x in izip_longest(*list_, fillvalue=' '):
    ...   print ' '.join(x)
    ... 
    a b d
      c e
        f
    
    0 讨论(0)
  • 2020-12-11 20:10
    string[] myList = null;
    myList = {'*', '* *', '* * *', '* * * *', '* * * * *', '* * * * * *'};
    for(int i=myList.Length-1; i>=0, i--) {
        Console.WriteLine(myList[i].ToString());
    }
    
    0 讨论(0)
  • 2020-12-11 20:11
    myList = ['* *', '*', '* * *', '* * * * *', '* * * * * *', '* * * *']
    import itertools
    for i in itertools.izip_longest(*myList, fillvalue=" "):
        if any(j != " " for j in i):
            print " ".join(i)
    

    Output

    * * * * * *
    *   * * * *
        * * * *
          * * *
          * *  
            *  
    
    0 讨论(0)
提交回复
热议问题