How to print a list more nicely?

前端 未结 22 1292
北荒
北荒 2020-12-01 09:34

This is similar to How to print a list in Python “nicely”, but I would like to print the list even more nicely -- without the brackets and apostrophes and commas, and even b

22条回答
  •  悲&欢浪女
    2020-12-01 10:08

    Here's my solution. (Copy in GitHub gist)

    It takes terminal width as input and displays only as many columns that can be fit in it.

    def col_print(lines, term_width=80, indent=0, pad=2):
      n_lines = len(lines)
      if n_lines == 0:
        return
    
      col_width = max(len(line) for line in lines)
      n_cols = int((term_width + pad - indent)/(col_width + pad))
      n_cols = min(n_lines, max(1, n_cols))
    
      col_len = int(n_lines/n_cols) + (0 if n_lines % n_cols == 0 else 1)
      if (n_cols - 1) * col_len >= n_lines:
        n_cols -= 1
    
      cols = [lines[i*col_len : i*col_len + col_len] for i in range(n_cols)]
    
      rows = list(zip(*cols))
      rows_missed = zip(*[col[len(rows):] for col in cols[:-1]])
      rows.extend(rows_missed)
    
      for row in rows:
        print(" "*indent + (" "*pad).join(line.ljust(col_width) for line in row))
    

提交回复
热议问题