按字母/字典顺序排列的两个字符串的平均值

2024-06-23

假设您采用字符串 'a' 和 'z' 并按字母顺序列出它们之间的所有字符串: ['a','b','c' ... 'x','y','z ']。取这个列表的中点,你就会找到“m”。所以这有点像取这两个字符串的平均值。

您可以将其扩展到具有多个字符的字符串,例如 'aa' 和 'zz' 之间的中点将位于列表的中间 ['aa', 'ab', 'ac' ... 'zx '、'zy'、'zz']。

可能有一个 Python 方法可以做到这一点吗?如果没有,即使知道算法的名称也会有所帮助。

我开始制作自己的例程,简单地遍历两个字符串并找到第一个不同字母的中点,这似乎在“aa”和“az”中点是“am”时效果很好,但在“cat”上失败了, 'doggie' 中点,它认为是 'c'。我尝试在谷歌上搜索“二进制搜索字符串中点”等,但不知道我在这里尝试做的事情的名称,我运气不佳。

我添加了我自己的解决方案作为答案


如果定义字符字母表,则只需转换为基数 10,进行平均,然后转换回基数 N,其中 N 是字母表的大小。

alphabet = 'abcdefghijklmnopqrstuvwxyz'

def enbase(x):
    n = len(alphabet)
    if x < n:
        return alphabet[x]
    return enbase(x/n) + alphabet[x%n]

def debase(x):
    n = len(alphabet)
    result = 0
    for i, c in enumerate(reversed(x)):
        result += alphabet.index(c) * (n**i)
    return result

def average(a, b):
    a = debase(a)
    b = debase(b)
    return enbase((a + b) / 2)

print average('a', 'z') #m
print average('aa', 'zz') #mz
print average('cat', 'doggie') #budeel
print average('google', 'microsoft') #gebmbqkil
print average('microsoft', 'google') #gebmbqkil

Edit:根据评论和其他答案,您可能希望通过将字母表的第一个字母附加到较短的单词直到它们的长度相同来处理不同长度的字符串。这将导致“平均值”落在字典排序中的两个输入之间。下面的代码更改和新输出。

def pad(x, n):
    p = alphabet[0] * (n - len(x)) 
    return '%s%s' % (x, p)

def average(a, b):
    n = max(len(a), len(b))
    a = debase(pad(a, n))
    b = debase(pad(b, n))
    return enbase((a + b) / 2)

print average('a', 'z') #m
print average('aa', 'zz') #mz
print average('aa', 'az') #m (equivalent to ma)
print average('cat', 'doggie') #cumqec
print average('google', 'microsoft') #jlilzyhcw
print average('microsoft', 'google') #jlilzyhcw
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按字母/字典顺序排列的两个字符串的平均值 的相关文章

随机推荐

  • 在选择复选框时显示和隐藏数据表中的列

    目前我正在研究数据表 在这里 我尝试根据复选框选择显示和隐藏表列 对于普通的 html 表 我知道如何使用 jquery 启用此服务 但同样不适用于数据表 任何人都可以建议我如何做到这一点吗 document ready function
  • GWT 导致 Eclipse 无法在 Windows XP 上启动

    单击 eclipse 会显示启动屏幕 然后应用程序将被静默终止 并且不会出现任何错误消息 log 文件包含以下信息 汇总 ENTRY org eclipse ui 4 4 2012 11 09 11 33 45 323 MESSAGE Cl
  • 如果文档的字段映射不匹配,Elasticsearch 会默默失败

    我在使用 Elasticsearch 时遇到了一个奇怪的问题 我的映射指定某个字段的类型long 现在 我无意中尝试索引一些具有以下内容的文档 string键入该字段而不是long 我没有从 Elasticsearch 中收到任何错误 但文
  • 在反应中点击渲染新组件

    我正在练习反应并尝试通过单击按钮来呈现新组件 这里的第一页是电子邮件 我想要呈现的组件包含密码页面 class App extends React Component passwordpage return
  • 通过反应流发送大文件

    我正在编写的应用程序的一部分需要将任意大 对于这个问题 我假设 100 200 GB 文件从客户端传输到服务器 重要的是 接收器 服务器 不存储该文件 它只是读取 检查流并将其发送到下一个点 因为我在任何时候都不需要整个文件 但希望同时进行
  • 正则表达式替换Python中的文本

    我的文字看起来像 Added a foo b foo 目标是使用一个正则表达式将第二个 foo 替换为 bar 并将两个双引号之间的第一个 foo 保持不变 所以在上面的文本中 我正在寻找的结果是 Added a foo b bar Tha
  • 如何将键盘焦点赋予弹出的 Gtk.Window

    我有一个弹出窗口 使用 WINDOW POPUP 类型创建 其中包含一些小部件 包括文本条目 问题是 当我单击该条目时 该条目没有获得焦点 因此我无法输入任何内容 我是否必须设置任何标志才能允许窗口获得键盘焦点 对于需要焦点的 gtk wi
  • Pandas DataFrame:根据条件替换列中的所有值

    我有一个简单的 DataFrame 如下所示 Team First Season Total Games 0 Dallas Cowboys 1960 894 1 Chicago Bears 1920 1357 2 Green Bay Pac
  • 如何调整 UITableView 的 tableHeaderView 的大小?

    我在调整 tableHeaderView 大小时遇到 问题 这么简单是行不通的 1 创建一个UITableView和UIView 100 x 320像素 2 将UIView设置为UITableView的tableHeaderView 3 构
  • 使应用程序成为系统关键流程

    我怎样才能创建一个关键系统进程 以便它不能从 C 中的任务管理器结束 一般来说 这是不可能的 因为这会剥夺用户的控制权 Windows 甚至允许您终止高度关键的进程 例如 csrss exe 请不要尝试终止它 保证立即出现 BSOD Ray
  • Kubernetes Pod 事件显示为“

    我们正在调查与 Azure Kubernetes 服务上的 Pod 启动缓慢相关的问题 Pod 启动完成后 我们将无法看到历史事件 最新的事件日志显示为
  • Angular Material 自定义组件主题

    我正在尝试在自定义 Angular Material 主题中为其他一些组件使用自定义调色板中的颜色 例如 带有垫子工具栏的 div 和带边距的图标 应使用主要背景颜色填充 关于主题的 Angular Material 指南说道 主题文件不应
  • Java Connection.close 是否回滚?

    Java Connection close 是否回滚到finally 块 我知道 Net SqlConnection close 可以做到这一点 有了这个 我可以在没有 catch 的情况下创建 try finally 块 Example
  • 如何配置仅在生产模式下运行 http 的 Keycloak 18?

    我遇到的情况是 我在终止安全 https 连接的反向代理后面运行 Keycloak 18 0 0 因此 我想构建一个 Docker 镜像 将 Keycloak 配置为仅侦听 http 例如端口 8080 我已经调整了Dockerfile来自
  • Nuxt 致命错误 TypeError:无法解构“this”的属性“nuxt”,因为它未定义

    当我尝试构建 docker 映像时 运行后出现此错误yarn build 0 0 496 yarn run v1 22 19 0 0 531 nuxt build 0 1 538 Using Tailwind CSS from assets
  • 如何使用 azure pipeline 生成 .AAB 文件并签署 Android 应用程序包

    我想使用 Azure 管道生成 Android 应用程序包 aab 文件 但在生成 Android 应用程序包文件时遇到问题 我已使用以下 Gradle 任务来生成并签署 aab 文件 但是 它生成 APK 文件 我想生成 aab 文件 t
  • Xcode 8.1 beta 3 - AQDefaultDevice 消息 [重复]

    这个问题在这里已经有答案了 从 beta2 开始 在创建音频输出单元后 我每两秒就会收到一条消息 2016 10 14 11 31 21 572479 MyProduct 94063 8294923 aqme 254 AQDefaultDe
  • 当条码扫描仪读取条码时,EditText焦点消失

    我需要读取应用程序的条形码 我为此使用触发式条码扫描仪 通过 USB 进行通信 如您所知 条形码扫描仪的工作原理类似于键盘 当设备读取条形码时 它会尝试将值写入具有焦点的输入 用户按下扳机 条码扫描器开始工作 直到 条码读取成功 然后它进入
  • 如何有选择地观察 Android Room 数据库 INSERT、DELETE 和 UPDATE 事件?

    我的 DAO 是这样设计的 Dao interface FooDao Query SELECT FROM foo LiveData
  • 按字母/字典顺序排列的两个字符串的平均值

    假设您采用字符串 a 和 z 并按字母顺序列出它们之间的所有字符串 a b c x y z 取这个列表的中点 你就会找到 m 所以这有点像取这两个字符串的平均值 您可以将其扩展到具有多个字符的字符串 例如 aa 和 zz 之间的中点将位于列