【发布时间】:2012-09-18 19:17:03
【问题描述】:
我想写一个函数,用空格代替T。
b=""
xs=list("fghtThjchk")
for x in xs:
if x=="T" or "t":
x==" "
b=b+x
我可以用 .replace 来做,但我还是想知道我能不能用 list 来做。
【问题讨论】:
我想写一个函数,用空格代替T。
b=""
xs=list("fghtThjchk")
for x in xs:
if x=="T" or "t":
x==" "
b=b+x
我可以用 .replace 来做,但我还是想知道我能不能用 list 来做。
【问题讨论】:
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
【讨论】:
这条线不符合你的要求
if x=="T" or "t":
该条件的计算结果始终为真,因为"t" 被认为是真实的。
你是说
if x=="T" or x=="t":
还有那一行
x==" "
我猜想是一个分配而不是比较:
x=" "
【讨论】:
您使用的语法有点不正确。 下面给出了在列表推导中使用 if/else 的正确方法:
''.join([' ' if x=='T' or x=='t' else x for x in xs])
-- 当字符串长度较大时,此方法速度更快且优化。
-- 我们在上面的答案中一次又一次地创建字符串对象,不推荐这样做。
-- 所以在对列表执行所有操作后总是使用 join() 加入列表,而不是在循环中使用 string concatenation。
【讨论】:
我们可以使用re(正则表达式)模块,速度很快:
import re
aa = re.sub(r'([.tT])', " ", "fghtThjchk")
【讨论】:
你需要通过索引来引用列表,比如这样:
for i, x in enumerate(xs):
if x in ["T", "t"]:
xs[i] = " "
【讨论】:
b中构建新字符串
当您执行for x in xs 时,您一次将名称x 分配给xs 的每个元素。当您执行x=" "(我认为== 是一个错字)时,您正在重新分配名称x,但不会更改xs 中的原始元素。
【讨论】: