1

每当我使用排列时,我都必须创建排列列表,因为它返回一个位于 0x0190A5D0 的“itertools.permutations 对象”。然后在创建列表之后,我必须组合每个列表中的字符串,以便获得我最初想要的排列。如果它是一个数字,那么我必须再次将它们全部设为整数。

两部分问题:

1)有没有更简单的方法来进行排列和创建数字列表?

2) 下面我创建了一个 5 位数字的排列。但是,在我有“12345”的地方,我希望用户输入他们自己的号码。因此格式化字符串 b=['s%s%s...] 必须是 n %s 和 n x。有人知道怎么做吗?

(仅供参考,我的程序试图在给定用户输入的情况下找到具有相同数字的下一个最大数字,因此 12345 下一个最大数字是 12354)

这两个问题都在下面得到了回答,请参阅两个回答。谢谢!!!

def nexthighest():
    from itertools import permutations
    numb = str(12345)
    a = list(permutations(numb))
    b = ['%s%s%s%s%s' % xxxxx for xxxxx in a]  #<-- this is where the n length problem occurs
    c = list(map(int,b))
    for i in c:
        if i >12345:
            print(i)
            break
4

2 回答 2

4

您不需要构建所有这些列表。只需遍历 from 的返回值permutations,将每个排列加入并解析为整数,因为它来自:

def nexthigher(n):
    for p in permutations(sorted(str(n))):
        i = int("".join(p))
        if i > n:
            return i
于 2012-06-24T16:25:52.437 回答
1

我可以为你回答第二部分:

b = ["".join(x) for x in a]
于 2012-06-24T16:16:20.133 回答