为什么列表理解交换案例有效,而for循环无效

2024-05-16 10:26:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python 3中交换string的大小写:

以下代码起作用:

print("".join([i.lower() if i.isupper() else i.upper() for i in s]))

但我的循环没有:

s = 'Terra'
for i in s:
    if i.isupper():
        i.lower()
    else:
        i.upper()
print(s)

我的循环有什么问题?我知道列表理解就像是压缩的1行循环,我想这里的代码也差不多。我知道像swapcase函数这样的解决方案已经存在,但我正在这里训练一些逻辑


Tags: 函数代码in列表forstringifupper
2条回答

试试看

s = 'Terra'
out_put_str = ""
for i in s:
    if i.isupper():
        out_put_str += i.lower()
    else:
        out_put_str += i.upper()

print(out_put_str)

在列表理解中,您正在创建一个列表,但在循环中,您没有为任何对象分配i.lower()i.upper()

要获得与循环相同的功能,您需要执行以下操作:

s = 'Terra'
swap = []
for i in s:
    if i.isupper():
        swap.append(i.lower())
    else:
        swap.append(i.upper())
print("".join(swap))

为了回答您关于哪种方法更快的后续问题,我对所讨论的四种方法进行了测试:

  1. 如上所述附加到列表中
  2. 附加到字符串的,例如out_put_str += i.lower()
  3. 在转换时打印每个字母,例如print(i.upper(), end="")
  4. 打印s.swapcase()

选项3绝对是最慢的,在2ms时比其他方法慢约3倍,但其他方法相当相似,时间范围重叠,但它们都在600µs±200µs左右

相关问题 更多 >