每当我使用排列时,我必须创建一个排列列表,因为它返回'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
答案 0 :(得分:4)
您无需构建所有这些列表。只需循环遍历permutations
的返回值,加入并解析为每个排列的整数:
def nexthigher(n):
for p in permutations(sorted(str(n))):
i = int("".join(p))
if i > n:
return i
答案 1 :(得分:1)
我可以为你回答第二部分:
b = ["".join(x) for x in a]