我正在写一个程序来确定用户输入的数据集的二次序列,例如-[0000,1,2222,9999]
我正在努力使用仅4位数分类的圆锥序列排序,而不是典型的8/16二进制方法。
我已经试过了:
for t in permutations(numbers, 4):
print(''.join(t))
但是它没有为输入的数据分配一个唯一的值,而是覆盖之前的值。
我该怎么做呢?
由于您的列表只包含数字0到9,并且您正在循环该列表,并打印内容,因此它将只打印0到9。
由于普通十进制数字的所有可能组合(或者更确切地说是排列,因为这就是你要问的)都是0到9999,所以你可以这样做:
for i in range(10000):
print(i)
有关range()
的更多信息,请参阅https://docs.python.org/3/library/functions.html#func-range。
但这不会将'0'这样的数字打印为'0000'。要做到这一点(在Python 3中,这可能是你应该使用的):
for i in range(10000):
print(f"{i:04d}")
有关f-string的更多信息,请参见https://docs.python.org/3/reference/lexical_analysis.html#f-strings。
当然,如果你需要的不是数字的排列,你不能使用这个方法。你可以这样做:
from itertools import permutations
xs = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
for t in permutations(xs, 4):
print(''.join(t))
参见https://docs.python.org/3/library/itertools.html#itertools.permutations了解更多关于permutations()
和combinations()
的区别。
你也可以这样做,如果你想在将来改变一些信息:
import math
NUMBERS = [0,1,2,3,4,5,6,7,8,9]
DIGITS = 4
MAX_ITERS = int(math.pow(len(NUMBERS), DIGITS))
for i in range(MAX_ITERS):
print(f"{i:04d}")