【问题标题】:Python - displaying conic sequence with only 4 digit sequencingPython - 仅显示 4 位排序的圆锥序列
【发布时间】:2021-10-30 22:28:23
【问题描述】:

我正在编写一个程序来确定用户输入数据集的圆锥序列,例如 - [0000,1,2222,9999]

我一直在努力仅使用 4 位分类而不是典型的 8/16 二进制方法对圆锥序列进行排序。


我试过这个:

for t in permutations(numbers, 4):
print(''.join(t))

但它不会为输入的数据分配唯一值,而是覆盖以前的值。

我该怎么做?

【问题讨论】:

  • for i in range(10000),或者使用itertools组合
  • 这没有帮助,它只是打印数字列表 10000 次。我想显示所有 4 位数字组合,如果我不够清楚,请见谅
  • 你真的尝试过我的建议吗? i 将成为[0 - 9999] 之间的所有值
  • 在打印之前添加到@Mahrkeenerh 将数字转换为字符串并使用.zfill(4)(为了提高性能,可能只有在数字低于1000时才这样做)
  • 你能回答我的命令应该是什么样子吗?谢谢!

标签: python list numbers


【解决方案1】:

由于您的列表仅包含数字 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 字符串的更多信息,请参阅 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))

有关permutations() 的更多信息以及与combinations() 的区别,请参阅https://docs.python.org/3/library/itertools.html#itertools.permutations

【讨论】:

    【解决方案2】:

    如果你想在未来更改一些信息,你也可以这样做:

    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}")
    

    【讨论】:

    • 对于一个简单的问题来说,这听起来过于复杂。
    • 另外,len(NUMBERS) ** DIGITS 工作得很好,不需要math
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2013-12-03
    相关资源
    最近更新 更多