首页 > 解决方案 > 如何在列表理解中增加变量

问题描述

我有一个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)

这是可运行的代码

标签: pythonpython-3.xlist

解决方案


如果我正确理解了您的要求,则应该执行以下操作(紧凑形式):

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 的模数为非零时乘以(并且评估为),否则使用.+/--1ibool()True1

不用说:这样的理解不一定容易阅读,所以如果你在你的脚本中使用它,它值得一个很好的评论以供将来参考。;)


推荐阅读