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
或者,您可以将问题拆分成更小的部分:
- format 每个 int 作为长度为 5 的左对齐字符串
- use the grouper recipe,
zip(*[iterator]*n)
将物品收集成 10 个一组
- 以类似 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
我有一个数字列表,我想每行显示 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
或者,您可以将问题拆分成更小的部分:
- format 每个 int 作为长度为 5 的左对齐字符串
- use the grouper recipe,
zip(*[iterator]*n)
将物品收集成 10 个一组 - 以类似 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