Python3 显示一定数量的输出

Python3 Display certain number of output

我有一个数字列表,我想每行显示 10 个,而且它们的格式必须非常好

start: 1
End: 1000
   2    3    5    7   11   13   17   19   23   29 
  31   37   41   43   47   53   59   61   67   71 
  73   79   83   89   97  101  103  107  109  113 
 127  131  137  139  149  151  157  163  167  173 
 179  181  191  193  197  199  211  223  227  229 
 233  239  241  251  257  263  269  271  277  281 
 283  293  307  311  313  317  331  337  347  349 
 353  359  367  373  379  383  389  397  401  409 
 419  421  431  433  439  443  449  457  461  463 
 467  479  487  491  499  503  509  521  523  541 
 547  557  563  569  571  577  587  593  599  601 
 607  613  617  619  631  641  643  647  653  659 
 661  673  677  683  691  701  709  719  727  733 
 739  743  751  757  761  769  773  787  797  809 
 811  821  823  827  829  839  853  857  859  863 
 877  881  883  887  907  911  919  929  937  941 
 947  953  967  971  977  983  991  997 

格式必须这样,开头的“2”必须在“31”中的“1”的前面,依此类推。

所以我尝试了一些解决方案

gen = ('%-5s\n' % x if i%10==0 else '%-5s' %x for i,x in enumerate(prime_list,1))

这会给我这样的东西

1    2    3    5    7    11   13   17   19   23
29   31   37   41   43   47   53   59   61   67
71   73   79   83   89   97   101  103  107  109
113  127  131  137  139  149  151  157  163  167
173  179  181  191  193  197  199  211  223  227
229  233  239  241  251  257  263  269  271  277
281  283  293  307  311  313  317  331  337  347
349  353  359  367  373  379  383  389  397  401
409  419  421  431  433  439  443  449  457  461
463  467  479  487  491  499  503  509  521  523
541  547  557  563  569  571  577  587  593  599
601  607  613  617  619  631  641  643  647  653
659  661  673  677  683  691  701  709  719  727
733  739  743  751  757  761  769  773  787  797
809  811  821  823  827  829  839  853  857  859
863  877  881  883  887  907  911  919  929  937
941  947  953  967  971  977  983  991  997

与我想要的完全相反。有人知道吗?

谢谢!

试试 gen = ('%+5s\n' % x if i%10==0 else '%+5s' %x for i,x in enumerate(prime_list,1)),而不是 gen = ('%-5s\n' % x if i%10==0 else '%-5s' %x for i,x in enumerate(prime_list,1))

>>> nums = [2,32,34,3,54,5,436,45,6,45,674,57,56,87,567,2]
>>> gen = ('%+5s\n' % x if i%10==0 else '%+5s' %x for i,x in enumerate(nums,1))
>>> for i in nums:
...     print(next(gen))
...
    2
   32
   34
    3
   54
    5
  436
   45
    6
   45
  674
   57
   56
   87
  567
    2

1 is not a prime。 因此,prime_list 不应包含 1。理想情况下,生成 prime_list 时应不包含 1。如果事后必须更正错误,请使用

prime_list = prime_list[1:]

纠正后,您的代码可以正常工作:

print(''.join('%-5s\n' % x if i%10==0 else '%-5s' %x for i,x in enumerate(prime_list,1)))

产量

2    3    5    7    11   13   17   19   23   29   
31   37   41   43   47   53   59   61   67   71   
...
947  953  967  971  977  983  991  997  

或者,您可以将问题拆分成更小的部分:

  1. format 每个 int 作为长度为 5 的左对齐字符串
  2. use the grouper recipe, zip(*[iterator]*n) 将物品收集成 10 个一组
  3. 以类似 table 的格式打印组

import itertools as IT

prime_list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139,
149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421,
431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521,
523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619,
631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839,
853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953,
967, 971, 977, 983, 991, 997]

prime_strs = ('{:<5d}'.format(val) for val in prime_list) # 1
grouped = IT.zip_longest(*[prime_strs]*10, fillvalue='')  # 2
print('\n'.join(''.join(row) for row in grouped))         # 3

产量

2    3    5    7    11   13   17   19   23   29   
31   37   41   43   47   53   59   61   67   71   
73   79   83   89   97   101  103  107  109  113  
127  131  137  139  149  151  157  163  167  173  
179  181  191  193  197  199  211  223  227  229  
233  239  241  251  257  263  269  271  277  281  
283  293  307  311  313  317  331  337  347  349  
353  359  367  373  379  383  389  397  401  409  
419  421  431  433  439  443  449  457  461  463  
467  479  487  491  499  503  509  521  523  541  
547  557  563  569  571  577  587  593  599  601  
607  613  617  619  631  641  643  647  653  659  
661  673  677  683  691  701  709  719  727  733  
739  743  751  757  761  769  773  787  797  809  
811  821  823  827  829  839  853  857  859  863  
877  881  883  887  907  911  919  929  937  941  
947  953  967  971  977  983  991  997