我有一个数字列表,我想每行显示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
我想要完全相反。有人有任何想法吗?
谢谢!
答案 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
或者,您可以将问题分成更小的部分:
zip(*[iterator]*n)
将这些项目收集到10个小组中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