str.replace()不会替换也不会引发错误(python)

时间:2020-09-16 11:29:50

标签: python list str-replace

所以我从网站上抓取了一个高度列表,我试图以英尺和英寸为单位查找这些高度的平均值。我的问题是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"

4 个答案:

答案 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起,使用下划线命名小写变量是一种惯例。 它不会改变代码的行为,但是对您未来的队友来说更具可读性。