1

順列を使用するときはいつでも、「0x0190A5D0でitertools.permutationsオブジェクト」を返すため、順列のリストを作成する必要があります。次に、リストを作成した後、各リストの文字列を組み合わせて、元々必要だった順列を作成する必要があります。それが数の場合、私はそれらをすべて整数にする必要があります。

2つの部分からなる質問:

1)順列を作成し、数値のリストを作成する簡単な方法はありますか?

2)以下に、5桁の数字の順列を作成しました。ただし、「12345」がある場合は、ユーザーに自分の番号を入力してもらいたい。したがって、フォーマット文字列b = ['s%s%s ...]はn%sおよびnxである必要があります。誰もがこれを行う方法を知っていますか?

(FYI私のプログラムは、ユーザーの入力を指定して同じ桁で次に大きい数字を見つけようとしているので、次に大きい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

これらすべてのリストを作成する必要はありません。からの戻り値をループし、次の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

私はあなたのためにパート2に答えることができます:

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