所以我从网站上抓取了一个高度列表,我试图以英尺和英寸为单位查找这些高度的平均值。我的问题是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"
答案 0 :(得分:1)
我的问题是str.replace()在这里不起作用,我不确定为什么。 (它不会给我任何错误消息
str.replace
不能就地工作,它会返回一个新字符串并应用替换。它还并不真正在乎它执行了多少次替换(无论是0还是1000),它只会在输入无意义的情况下才会引发错误,例如如果您提供整数。
在这里,您通常会创建一个包含转换/转换后的值的全新列表(使用过程for
循环或列表理解),而不是尝试就地更新值。
尽管请注意,这里的替换实际上没有意义:英制单位不是小数,英尺不是10英寸而是12英寸,所以5英尺9是5.75英尺而不是5.9英尺。
答案 1 :(得分:0)
您尚未更改x
的值。 str.replace()
不会在适当的位置更改变量,您需要将返回值重新分配给x,以使其在以后调用print(x)
时生效。
maleswimLIST = [x.replace("\'",".") for x in maleswimLIST]
答案 2 :(得分:0)
您在字符串x
上调用的replace函数不会更改该值,您需要再次设置它:
result = []
for x in maleswimLIST:
result.append(x.replace("'", ".")
print(result)
或者作为更复杂的列表理解:
result = [x.replace("'", ".") for x in maleswimLIST]
顺便说一句:您无需在替换函数中转义撇号'。
答案 3 :(得分:0)
问题说明
replace
方法返回新值,并且原始值保持不变(字符串是不可变的)
返回字符串的副本,其中所有出现的子字符串old都被new替换。如果给出了可选的参数count,则仅替换第一个出现的计数。
代码修复
使用列表理解,遍历列表并收集替换值:
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起,使用下划线命名小写变量是一种惯例。 它不会改变代码的行为,但是对您未来的队友来说更具可读性。