str.replace() 不会替换也不会抛出错误 (python)

str.replace() doesn't replace nor throw errors (python)

所以我从一个网站上抓取了一个高度列表,我试图找到以英尺和英寸为单位的这些高度的平均值。我的问题是 str.replace() 在这里不起作用,我我不确定为什么。 (它没有给我任何错误消息)关于如何解决这个问题有什么建议吗?

> print(maleswimLIST)
> ['6\'5"', '5\'10"', '5\'9"', '6\'2"', '6\'5"', '5\'10"', '5\'8"', '5\'8"', '5\'10"', '5\'9"', '5\'7"', '6\'2"', '6\'0"', '6\'0"', '5\'11"', '6\'3"', '5\'10"', '5\'10"', '5\'5"', '6\'1"', '5\'9"', '5\'7"', '6\'3"', '6\'5"', '5\'10"', '5\'9"', '6\'2"', '6\'5"', '5\'10"', '5\'8"', '5\'8"', '5\'10"', '5\'9"', '5\'7"', '6\'2"', '6\'0"', '6\'0"', '5\'11"', '6\'3"', '5\'10"', '5\'10"', '5\'5"', '6\'1"', '5\'9"', '5\'7"', '6\'3"']
> for x in maleswimLIST:
    x.replace("\'",".")
    print(x)

> 6'5"
5'10"
5'9"
6'2"
6'5"
5'10"
5'8"
5'8"
5'10"
5'9"
5'7"
6'2"
6'0"
6'0"
5'11"
6'3"
5'10"
5'10"
5'5"
6'1"
5'9"
5'7"
6'3"
6'5"
5'10"
5'9"
6'2"
6'5"
5'10"
5'8"
5'8"
5'10"
5'9"
5'7"
6'2"
6'0"
6'0"
5'11"
6'3"
5'10"
5'10"
5'5"
6'1"
5'9"
5'7"
6'3"

My problems is that the str.replace() is not working here and I am not sure why. (It doesn't give me any error messages

str.replace 不起作用 in-place,它 returns 应用了替换的新字符串。它也并不真正关心它执行了多少次替换(无论是 0 还是 1000),它只会在输入无意义时引发错误,例如如果您提供整数。

在这里,您通常会创建一个包含转换/转换值的全新列表(使用程序 for 循环或列表理解),而不是尝试更新值 in-place。

尽管请注意,您在此处的替换实际上没有意义:英制单位不是十进制,英尺不是 10 英寸而是 12,因此 5ft9 是 5.75 英尺而不是 5.9ft。

您没有更改 x 的值。 str.replace()并没有原地改变变量,需要将return的值重新赋值给x,以便之后调用print(x)时生效。

maleswimLIST = [x.replace("\'",".") for x in maleswimLIST]

您在字符串 x 上调用的替换函数不会更改原位的值,您需要重新设置它:

result = []
for x in maleswimLIST:
    result.append(x.replace("'", ".")
print(result)

或者作为更 pythonic 的列表理解:

result = [x.replace("'", ".") for x in maleswimLIST]

顺便说一句:无需转义替换函数中的撇号 '。

问题解释

replace方法returns新值,原值不变(字符串不可变)

Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.

代码修复

使用列表理解,迭代列表,并收集替换值:

male_swim_list =  ['6\'5"', '5\'10"', '5\'9"', '6\'2"', '6\'5"', '5\'10"', '5\'8"', '5\'8"', '5\'10"', '5\'9"', '5\'7"', '6\'2"', '6\'0"', '6\'0"', '5\'11"', '6\'3"', '5\'10"', '5\'10"', '5\'5"', '6\'1"', '5\'9"', '5\'7"', '6\'3"', '6\'5"', '5\'10"', '5\'9"', '6\'2"', '6\'5"', '5\'10"', '5\'8"', '5\'8"', '5\'10"', '5\'9"', '5\'7"', '6\'2"', '6\'0"', '6\'0"', '5\'11"', '6\'3"', '5\'10"', '5\'10"', '5\'5"', '6\'1"', '5\'9"', '5\'7"', '6\'3"']

male_swim_list = [x.replace("\'", ".") for x in male_swim_list]

print(male_swim_list)

输出:

['6.5"', '5.10"', '5.9"', '6.2"', '6.5"', '5.10"', '5.8"', '5.8"', '5.10"', '5.9"', '5.7"', '6.2"', '6.0"', '6.0"', '5.11"', '6.3"', '5.10"', '5.10"', '5.5"', '6.1"', '5.9"', '5.7"', '6.3"', '6.5"', '5.10"', '5.9"', '6.2"', '6.5"', '5.10"', '5.8"', '5.8"', '5.10"', '5.9"', '5.7"', '6.2"', '6.0"', '6.0"', '5.11"', '6.3"', '5.10"', '5.10"', '5.5"', '6.1"', '5.9"', '5.7"', '6.3"']

一些建议

至少从 PEP 8 开始,用小写字母和下划线命名变量是一种惯例。 它不会改变代码的行为,但对您未来的队友来说更具可读性。