您如何将其从 Perl 转换为 Python?

2024-01-11

我有一个 Perl 函数,它接受时间戳并返回未更改的时间戳(如果以前从未见过),否则它会附加一些字母以使其唯一:

sub uniqify($) {
  my $timestamp = shift;

  state $last_ts = -1;
  state $next_letter = 'A';

  if ($timestamp == $last_ts) {
    $timestamp .= $next_letter++;
  } else {
    $last_ts = $timestamp;
    $next_letter = 'A';
  }

  return $timestamp;
}

因此,如果您使用值 1、1、1 和 2 调用它四次,它将返回 1,然后是 1A,然后是 1B,然后是 2。

注意:它只会以不断增加的时间戳被调用,所以它不需要回忆它见过的每一个,只需要回忆最后一个。

现在我需要将这个函数翻译成Python。我了解到我可以用全局变量替换“状态”变量(哎呀!)或者将它们作为属性附加到函数中,但这些都不是特别优雅。

另外,Python 没有像 Perl 神奇的自动增量那样的东西,如果你“++”一个值为“A”的变量,它就会变成“B”——或者如果它是“Z”,它就会变成“AA”。所以这也是一个曲线球。

我正在拼凑一个解决方案,但它真的很难看并且难以阅读。从 Perl 翻译成 Python 应该会产生相反的效果,对吧? :) 所以我将此作为对 SO 用户的挑战。你能把它变成一个优雅的Python函数吗?


Look at 这是将数字转换为字母数字 ID 的可靠方法的答案 https://stackoverflow.com/questions/410485/whats-the-5-character-alphanumeric-id-in-reddit-url/410504#410504

我提供的代码不是从“Z”到“AA”,而是到“BA”,但我认为这并不重要,它仍然会产生一个唯一的ID

from string import uppercase as up
import itertools

def to_base(q, alphabet):
    if q < 0: raise ValueError( "must supply a positive integer" )
    l = len(alphabet)
    converted = []
    while q != 0:
        q, r = divmod(q, l)
        converted.insert(0, alphabet[r])
    return "".join(converted) or alphabet[0]

class TimestampUniqifier( object ):
    def __init__(self):
        self.last = ''
        self.counter = itertools.count()
    def __call__( self, str ):
        if str == self.last:
            suf = self.counter.next()
            return str + to_base( suf, up )
        else:
            self.last = str
            self.counter = itertools.count()
            return str            

timestamp_uniqify = TimestampUniqifier()

usage:

timestamp_uniqify('1')
'1'
timestamp_uniqify('1')
'1A'
timestamp_uniqify('1')
'1B'
timestamp_uniqify('1')
'1C'
timestamp_uniqify('2')
'2'
timestamp_uniqify('3')
'3'
timestamp_uniqify('3')
'3A'
timestamp_uniqify('3')
'3B'

你可以多次调用它,它仍然会产生好的结果:

for i in range(100): print timestamp_uniqify('4')

4
4A
4B
4C
4D
4E
4F
4G
4H
4I
4J
4K
4L
4M
4N
4O
4P
4Q
4R
4S
4T
4U
4V
4W
4X
4Y
4Z
4BA
4BB
4BC
4BD
4BE
4BF
4BG
4BH
4BI
4BJ
4BK
4BL
4BM
4BN
4BO
4BP
4BQ
4BR
4BS
4BT
4BU
4BV
4BW
4BX
4BY
4BZ
4CA
4CB
4CC
4CD
4CE
4CF
4CG
4CH
4CI
4CJ
4CK
4CL
4CM
4CN
4CO
4CP
4CQ
4CR
4CS
4CT
4CU
4CV
4CW
4CX
4CY
4CZ
4DA
4DB
4DC
4DD
4DE
4DF
4DG
4DH
4DI
4DJ
4DK
4DL
4DM
4DN
4DO
4DP
4DQ
4DR
4DS
4DT
4DU
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您如何将其从 Perl 转换为 Python? 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 更新 UITabBar 视图?

    我有一个应用程序 我使用工具栏上的按钮来调用视图 但我将其切换为使用选项卡栏 使用按钮时 我在 MainViewController m 中使用以下代码来更新页面上的值 并且工作正常 IBAction loadSummaryView id
  • 以最佳性能将数据插入 SQL Server

    我有一个大量使用数据库 SQL Server 的应用程序 因为它必须具有高性能 所以我想知道从执行时间的角度将记录插入 DB Fastest 的最快方法 我应该用什么 据我所知 最快的方法是创建存储过程并从代码 ADO NET 调用它 请让
  • 根据两个向量计算方向角?

    假设我有两个 2D 向量 一个用于对象的当前位置 一个用于该对象的先前位置 如何计算出行进的角度方向 这张图片可能有助于理解我所追求的 图片 http files me com james ingham crcvmy http files
  • 计算 SQL Server 中表的哈希值或校验和

    我正在尝试计算 SQL Server 2008 中整个表的校验和或哈希 我遇到的问题是该表包含 XML 列数据类型 校验和无法使用该数据类型 必须将其转换为 nvarchar第一的 所以我需要将其分解为两个问题 计算一行的校验和 模式在运行
  • 使用 Eclipse 运行时 rJava 错误

    我已经安装了 R 3 0 1 和 Eclipse Kepler 我已经安装了 StatE 来通过 Eclipse R 控制台运行 R 脚本 没有任何问题 但是 我似乎无法运行 java 程序 我发布我的问题是为了看看其他人是否遇到过这些问题
  • FindItems() 和 BindToItems() 为 EmailMessage.Sender.Address 提供不一致的结果

    经过大量调试后 我将复杂的托管 EWS 问题细化为以下两个简单的测试用例 第一个有效 第二个失败 var view new ItemView 100 PropertySet new PropertySet EmailMessageSchem
  • phpMyAdmin 在哪里存储 phpMyAdmin 用户密码?

    在设置 phpMyAdmin 的过程中 创建了一个 phpMyAdmin 用户 当我查看 phpMyAdmin 数据库权限时 我可以看到该用户 哪个 PHP 文件存储该用户的密码 保罗 不存在 phpMyAdmin 用户这样的东西 phpM
  • Android 菜单上的复选框项目状态

    如何设置菜单的复选框项目部分的初始值 当我启动一个活动时 我想设置一个保存在共享首选项中的布尔值 menu menu
  • 使用 If、ElseIf、ElseIf 比使用 If、If、If 更好吗?

    使用之间真的有什么区别吗 If this Else If that Else 或使用 If this If that Else 执行速度更快吗 编译器或架构有什么区别吗 两者的内容有很大的区别this 块和that 块可以both以第二种形
  • 如何在 VB.NET 中将接口属性设置为只读?

    这是我之前关于接口的问题的后续 我收到了我喜欢的答案 但我不确定如何在 VB NET 中实现它 上一个问题 该属性应该是我的对象接口的一部分吗 https stackoverflow com questions 239909 should
  • 无法安装 Elasticsearch-5.x 的 Search Guard 插件

    由于限制 我不被允许从互联网上安装任何软件包 所以 这个命令对我来说安装没有用搜查卫士 https github com floragunncom search guard bin elasticsearch plugin install
  • 如果没有导航控制器,抽屉布局将无法工作

    为什么我们无法在没有导航 导航控制器的情况下在 Android 中设置抽屉布局 每当我们想要设置抽屉时 我们都需要一个导航控制器 就像下面这样 private lateinit var drawerLayout DrawerLayout p
  • 将 Sublime Text 3 设置为 git commit 文本编辑器

    我在将 sublime 设置为 git 提交消息编辑器时遇到问题 Using git config global core editor subl 错误 错误 无法运行 subl 没有这样的文件或目录 错误 无法启动编辑器 subl 请使用
  • gatsby 和 graphql:过滤特定的单个图像

    我不太了解 graphql 或 gatsby 但我相信通过将其放入 gatsby config js 中 我的所有图像都会加载到 graphql 中 resolve gatsby source filesystem options name
  • 我应该使用哪种 API 将用户权限提升为 Mac OS X 中的超级用户?

    我想将我的应用程序的权限提升为超级用户 安装程序应用程序通过显示来支持这一点这个对话框 http en wikipedia org wiki File Mac OS X Authenticate png 如何显示此对话框以提升权限 附言 我
  • 如何在 Android N 中的时间选择器中获取 30 分钟间隔

    我想要得到30 min interval from time picker dialog下面的代码可以正常工作Android N但不适用于最新设备 下面是我的代码activity public class MainActivity exte
  • 获取mysql资源字符串的第一行?

    这是我的问题 我需要数据库中的多行 并且我需要第一行来执行某些任务 然后再次遍历所有列表以创建记录集 query SELECT FROM mytable result mysql query query firstrow extract f
  • 使用 SAX 解析器解析 html

    我正在尝试使用 SAX 解析器解析普通的 html 文件 SAXBuilder builder2 new SAXBuilder try Document sdoc Document builder2 build readFile NodeL
  • 使用for循环生成Html表

    请帮助解决以下提到的场景 gt 我想在表格中显示从 1 到 30 的值 这样 1 2 3 应该出现在一个标签中 同样 4 5 6 应该出现在其他 tr 标签中 依此类推 直到 30 值 我想使用表格来显示表格元素中的值 其中像 1 这样的每
  • 您如何将其从 Perl 转换为 Python?

    我有一个 Perl 函数 它接受时间戳并返回未更改的时间戳 如果以前从未见过 否则它会附加一些字母以使其唯一 sub uniqify my timestamp shift state last ts 1 state next letter