python - 如何在列表理解中增加变量
问题描述
我有一个python函数,如果索引为奇数,则将字符增加1 ascii值,如果索引为偶数,则将ascii值减少1。我想将其转换为执行相同递增和递减但在下一组中的函数我想增加2然后减少-2然后减少3和-3等等..
我试图做的是在执行 ascii 减量后每次出现偶数索引时将计数器变量增加 1。
我也不想用for
循环来做有没有办法在列表理解本身中做到这一点?
在我的函数中,如果输入是
输入:'abcd' 输出:是'badc' 我想要的是'baeb'
输入:'cgpf' 输出:是'dfqe' 我想要的是'dfrd'
def changer(s):
b=list(s)
count=1
d=[chr(ord(b[i])+count) if i%2==0 else chr(ord(b[i])-count) for i in range(0,len(b))]
return ''.join(d)
我需要一些类似count++
的东西,但遗憾的是 python 不支持它。
def changer(s):
b=list(s)
count=1
d=[chr(ord(b[i])+count) if i%2==0 else chr(ord(b[i])-count++) for i in range(0,len(b))]
return ''.join(d)
解决方案
如果我正确理解了您的要求,则应该执行以下操作(紧凑形式):
def changer(s):
return "".join(chr(ord(c) + ((i // 2) + 1) * (-1 if i % 2 else 1))
for i, c in enumerate(s))
我们从字符串中获取索引和字符,enumerate()
并使用它来为生成器理解(根据要求)提供远离字符串的索引(i
)和字符(c
)。
对于 的每个 ASCII 值c
,我们将整数除法的结果相加i
(以索引为0
基础,加一)2
并乘以基于偶数/奇数(-1 if i % 2 else 1)
翻转的结果:当除以 2 的模数为非零时乘以(并且评估为),否则使用.+/-
-1
i
bool()
True
1
不用说:这样的理解不一定容易阅读,所以如果你在你的脚本中使用它,它值得一个很好的评论以供将来参考。;)
推荐阅读
- rust - 使用柴油和杜松插入值时出现奇怪的错误
- html - 垂直到水平打开关闭动画
- html - 如何使光标上的文本通过悬停显示图像
- mongodb - 如何按索引对嵌套的 mongodb 数组进行查询?
- visual-studio-2019 - Clickonce 使用 .NET 5 运行时发布 .NET 5 应用程序
- python - MongoDB 索引创建
- c++ - Gstreamer 切换视频并从上一个视频的时间戳播放新的视频
- python - 如何将数据框中的一列分成多列?[蟒蛇,熊猫]
- sql - 获取平均值、最大值、最小值、最后附加值和时间
- gsm - 是否可以解码 A3 或 A8 算法?