我想写一个函数,用空格替换T.
b=""
xs=list("fghtThjchk")
for x in xs:
if x=="T" or "t":
x==" "
b=b+x
我可以用.replace来做,但我仍然想知道我可以使用列表来做它。
答案 0 :(得分:6)
x==" "
与x=" "
不同,这就是b获取错误值的原因
if x=="T" or "t":
并不意味着“是'T'或't'中的x之一”。您需要这样说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
答案 1 :(得分:5)
此行无法执行您想要的操作
if x=="T" or "t":
该条件总是评估为真,因为"t"
被认为是真实的。
你的意思是
if x=="T" or x=="t":
和
这一行x==" "
我想,是一项任务而不是比较:
x=" "
答案 2 :(得分:3)
您使用的语法有点不正确。 下面给出了在列表推导中使用if / else的正确方法:
''.join([' ' if x=='T' or x=='t' else x for x in xs])
- 这种方法更快更快当字符串长度很大时优化。
- 我们再次创建字符串对象&再次在上述答案中,不推荐。
- 所以在执行所有操作后,总是使用 join()加入列表,而不是循环中的字符串连接。
答案 3 :(得分:2)
我们可以使用快速的re
(正则表达式)模块:
import re
aa = re.sub(r'([.tT])', " ", "fghtThjchk")
答案 4 :(得分:0)
您需要按索引引用列表,例如:
for i, x in enumerate(xs):
if x in ["T", "t"]:
xs[i] = " "
答案 5 :(得分:0)
当您执行for x in xs
时,您一次为x
的每个元素分配名称xs
。当您执行x=" "
时(我认为==
是拼写错误),您将重新分配名称x
,但不会更改xs
中的原始元素。