如何使用 itertools 模块获取排序列表中下一个按字典顺序更大的字符串?

2023-12-26

我需要输入一个字符串,并返回其下一个字典顺序更大的字符串。例如,'anmdfg'的下一个字符串是'anmdgf'。但是,输入的长度可能非常大,它可能包含100个字符或更多,而且里面会有一些重复的字符。所以我决定使用 itertools.permutations 而不将其放入列表以避免内存过度消耗。

#!/usr/bin/env python3
from itertools import permutations

a = list(input())
tuple_a = tuple(a)
b = permutations(a,len(a))
p = next(b)
result = ''

try:
    while 1:
        p = next(b)        
        if p > tuple_a:
            result = ''.join(p)
            print(result)
        break

except:
    if result == '':
        print('No answer.')
else:
    if result == '':
        print('No answer.')

我的样本中的 b 没有排序。看来我必须先生成列表。我尝试过,它消耗了我的内存如此之快,以至于我没有时间终止该进程。 有没有办法让我在不制作列表的情况下对排列结果进行排序?


是真的,really生成小于输出的所有排列效率低下。更好地使用经典线性时间算法 https://en.wikipedia.org/wiki/Permutation#Generation_in_lexicographic_order实施如下:

def nextperm(lst):
  for i in range(len(lst) - 1, 0, -1):
    if lst[i-1] < lst[i]:
      for j in range(len(lst) - 1, i-1, -1):
        if lst[i-1] < lst[j]:
          return lst[:i-1] + lst[j:j+1] + lst[:j:-1] + lst[i-1:i] + lst[j-1:i-1:-1]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 itertools 模块获取排序列表中下一个按字典顺序更大的字符串? 的相关文章

  • 如何在python 3.8中安装opencv-python

    我在 pycharm 中安装 opencv python 时遇到问题 打开 pycharm 后 我单击 设置 然后单击 项目解释器 单击 并搜索正确的模块 我开始安装 但失败了 Could not find a version that s
  • 赋值运算符左/右侧的不同切片行为

    作为一个来自 C 背景的 Python 新手 Python 3 4 x 中的切片运算符对我来说看起来很荒谬 我只是不明白 特殊规则 背后的设计理念 让我解释一下为什么我说它 特别 一方面 根据 Stack Overflow 的回答here
  • 如何在列表的解析参数中解析列表(字符串)而不是列表(字符)?

    我在flask中使用flask restful 我的代码如下 from flask restful import Resource reqparse apilink parser reqparse RequestParser apilink
  • numpy.nan_to_num - 'nan' 关键字无法识别

    当您尝试使用以下代码将 nan 值替换为自定义数值时 np nan to num exp allowance nan 9999 99 它产生以下错误 typeerror nan to num got an unexpected keywor
  • 递归:n项级数之和

    需要递归函数 系列是 1 2 3 3 4 5 4 5 6 7 递归求 n 的级数之和 我无法想到应该在函数中传递哪些参数 我的方法 我认为我应该传递 n 要相乘的项数 但我无法想到的是我应该如何在同一个函数中 和 以及我的 return 语
  • CSR 矩阵 - 矩阵乘法

    我有两个方阵A and B 我必须转换B to CSR Format并确定产品C A B csr C 我在网上找到了很多关于CSR 矩阵 向量乘法 http www mathcs emory edu cheung Courses 561 S
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • 使用Python批量重命名文件

    下面是我的代码来批量重命名给定目录中的图片 def multi filename change i 0 files askstring Select your folder Paste your directory path where y
  • 让电脑实现360度=0度,旋转炮塔

    我正在制作一个游戏 其中有一个计算机控制的炮塔 炮塔可360度旋转 它使用 trig 找出枪瞄准所需的角度 obj deg 并将枪的当前角度存储在 gun deg 下面的代码以设定的速度旋转枪 if objdeg gt gundeg gun
  • 使用 python3 查找表情符号的宽度

    我尝试使用 python 中的模式打印字母 A def printA length height symbol a for i in range length for i in range height for i in range hei
  • 广度优先搜索:检查访问状态的时机

    在有向图的广度优先搜索中 可能循环 当一个节点出队时 其所有尚未访问的子节点都会入队 并且该过程将继续 直到队列为空 有一次 我以相反的方式实现它 将节点的所有子节点排队 并在节点出队时检查访问状态 如果正在出队的节点之前已被访问过 则该节
  • 使用 Pandas 来“applymap”来访问索引/列?

    解决以下 pandas 问题的最有效方法是什么 这是一个简化的示例 其中包含数据框中的一些数据 import pandas as pd import numpy as np df pd DataFrame np random randint
  • Python替换多个字符串同时支持反向引用

    有一些好方法 https stackoverflow com questions 6116978 python replace multiple strings处理 python 中的同时多字符串替换 但是 我在创建一个高效的函数来实现这一
  • 如何以最小化每个分区总和的最大值的方式对整数数组进行分区?

    输入是正整数或空整数的数组 A 和另一个整数 K 我们应该将 A 划分为 K 个连续元素块 我所说的 划分 是指 A 的每个元素都属于某个块 并且 2 个不同的块不包含任何共同元素 我们将块的总和定义为该块的元素的总和 目标是在 K 个块中
  • Python setuptools:如何在 setup.py 中添加私有存储库 (gitlab)?

    我上传了 2 个包 它们位于我的 gitlab 存储库中 如果我想使用 pip 将它们安装在我的系统中 这很容易 因为 gitlab 可以帮助您 https docs gitlab com ee user packages pypi rep
  • 如何使用 pyinstaller 包含文件?

    我也使用 tkinter 使用 python 3 7 编写了一个程序 由于我使用的是外部图片 因此当我将所有内容编译为一个 exe 时 我需要包含它们 我试过做 add data bg png files 但我仍然收到此错误 tkinter
  • 有没有办法在 C 中按多个变量对结构进行排序?

    我必须编写一个对数组中的结构进行排序的函数 结构是 define MAX USERNAME LENGTH 16 typedef struct char username MAX USERNAME LENGTH unsigned int ri
  • 有没有办法在每个特定的时间间隔运行 python Flask 函数并在本地服务器上显示输出?

    我正在使用 Flask 工作 python 程序 我想从字典中提取键 该密钥为文本格式 但我想在每个特定的时间间隔后重复上述整个过程 并每次在本地浏览器上显示此输出 我已经使用flask apscheduler尝试过这个 程序只运行一次并显
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • PHP 使用主键和辅助键对多维数组进行排序[重复]

    这个问题在这里已经有答案了 如何按主键和辅助键对多维数组进行排序 例如 假设有以下数组 result array result 0 prio 1 result 0 date 2010 02 28 result 0 post February

随机推荐