How do I print this list vertically?

流过昼夜 提交于 2019-11-28 13:47:26
myList = ['* *', '*', '* * *', '* * * * *', '* * * * * *', '* * * *']
import itertools
for i in itertools.izip_longest(*myList, fillvalue=" "):
    if any(j != " " for j in i):
        print " ".join(i)

Output

* * * * * *
*   * * * *
    * * * *
      * * *
      * *  
        *  
>>> 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
Apis Utilis

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.

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:

* * * * * *
*   * * * *
    * * * *
      * * *
      * *  
        *  
string[] myList = null;
myList = {'*', '* *', '* * *', '* * * *', '* * * * *', '* * * * * *'};
for(int i=myList.Length-1; i>=0, i--) {
    Console.WriteLine(myList[i].ToString());
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!