Python3显示一定数量的输出

时间:2015-03-09 09:10:10

标签: python python-3.x formatting format

我有一个数字列表,我想每行显示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

我想要完全相反。有人有任何想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试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 :(得分:0)

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. 以类似表格的格式打印组

  4. 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  
    

相关问题