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 开始,用小写字母和下划线命名变量是一种惯例。
它不会改变代码的行为,但对您未来的队友来说更具可读性。
所以我从一个网站上抓取了一个高度列表,我试图找到以英尺和英寸为单位的这些高度的平均值。我的问题是 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 开始,用小写字母和下划线命名变量是一种惯例。 它不会改变代码的行为,但对您未来的队友来说更具可读性。