0

我想写一个函数,用空格替换 T 。

   b=""
   xs=list("fghtThjchk")
   for x in xs:
       if x=="T" or "t":
           x==" "
           b=b+x

我可以用 .replace 来做到这一点,但我仍然想知道我可以使用 list 来做到这一点。

4

6 回答 6

6

x==" "x=" "b 得到错误值的原因不同

if x=="T" or "t":并不意味着“x 是 'T' 或 't' 之一”。你需要这样if x in 'Tt':或这样说if x=="T" or x=="t":

也许这就是你想要做的

b = ""
for x in "fghtThjchk":
    if x == "T" or x == "t":
        x = " "
    b = b + x
于 2012-09-27T04:17:48.350 回答
5

这条线不符合您的要求

if x=="T" or "t":

该条件始终评估为真,因为"t"被认为是真实的。

你的意思是

if x=="T" or x=="t":

和那行说

x==" "

我想,这意味着是一项任务,而不是比较:

x=" "
于 2012-09-27T04:20:23.463 回答
3

您使用的语法有点不正确。下面给出了在列表推导中使用 if/else 的正确方法:

''.join([' ' if x=='T' or x=='t' else x for x in xs])

-- 当字符串长度较大时,此方法更快且优化。

- 我们在上面的答案中一次又一次地创建字符串对象,不建议这样做。

-- 所以在对列表执行所有操作后,总是使用join()来加入列表,而不是循环中的字符串连接

于 2012-09-27T04:26:20.283 回答
2

我们可以使用re(Regular Expression) 模块,它很快:

import re
aa = re.sub(r'([.tT])', " ", "fghtThjchk")
于 2012-09-27T10:44:20.560 回答
0

您需要按索引引用列表,例如:

for i, x in enumerate(xs):
    if x in ["T", "t"]:
        xs[i] = " "
于 2012-09-27T04:17:57.543 回答
0

当您这样做时,for x in xs您一次将名称分配x给一个元素的每个元素xs。当您这样做时x=" "(我认为==是错字),您正在重新分配名称x,但不会更改xs.

于 2012-09-27T04:20:56.180 回答