python:在List Comprehensions中分配或更新参数

时间:2016-11-22 08:12:01

标签: python python-2.7 list-comprehension

我是python的新手,我正在使用python 2.7 我想创建脚本更改字符串中每个字母的大小写。 如果我通过“ABcdE”脚本将输出“abCDe”
有很多方法,但我想使用List Comprehensions来完成这项任务。

我使用了以下代码:

str = 'abcDE';
str1 = [x for x in str if ord(x)>=97 and ord(x)<=122 x-32 elif   ord(x)>=65 and ord(x)<=90 x+32];

这给了我 Invalid syntax错误。 我不明白什么是错误。 我也试过了另一个版本:
请查看附件截图。enter image description here

当你看最后一次尝试。当我删除更新变量代码时,它运行成功。 我的问题是为什么变量修改在理解中不起作用?

2 个答案:

答案 0 :(得分:1)

您需要使用条件表达式;您正在使用过滤,过滤器不能改变生成的内容,只限制考虑的元素。

应改变左侧表达式,因此为迭代中的每个元素生成值的部分:

[x.upper() if 122 >= ord(x) >= 97 else x.lower()
 for x in yourstring]

以上处理yourstring中的所有字母(我将其重命名为避免使用内置名称str),并且对于每个此类字母(在x中),要么使用大写字母,如果是小写字母,否则使用小写字母。

演示:

>>> yourstring = 'abcDE'
>>> [x.upper() if 122 >= ord(x) >= 97 else x.lower() for x in yourstring]
['A', 'B', 'C', 'd', 'e']

如果您想要新字符串,请使用''.join()

''.join([x.upper() if 122 >= ord(x) >= 97 else x.lower()
         for x in yourstring])

您可以使用内置的str.swapcase() function执行相同的工作。

答案 1 :(得分:0)

您可以执行以下操作:

str1 = [x.lower() if x.isupper() else x.upper() for x in str]