列表中的字符串替换不起作用

时间:2018-03-18 05:16:10

标签: python string list replace

您可以在下面的代码中看到我正在创建一个字符串列表,这些字符串基本上形成planes列表定义的多个圈。该问题与hover列表相关联。基本上,如果click_xclick_y位于字符串定义的特定区域内,那么它应该替换该区域内的所有字符串,但出于某种原因,text.replace(...)不做任何事情,我的意思是在"替换"之后,hover列表仍然是相同的。所有帮助表示赞赏。

此外,由于某种原因我收到了TypeError,因此我无法使用np.where。

import numpy as np

planes = [2, 3, 4, 5]

edge = planes[-1]
x = np.linspace(-edge, edge, 50)
y = np.linspace(-edge, edge, 50)

regions = []
hover = []
# Normal Display
for i in x:
    row = []
    text_row = []
    for j in y:

        # TODO: Make what_region function
        if np.sqrt(i ** 2 + j ** 2) < planes[0]:
            row.append(7)  # <- Arbitrary number to adjust color
            text_row.append('Region 1')

        if np.sqrt(i ** 2 + j ** 2) > planes[-1]:
            row.append(5)  # <- Arbitrary number to adjust color
            text_row.append('Region {}'.format(len(planes) + 1))

        for k in range(len(planes) - 1):
            if planes[k] < np.sqrt(i ** 2 + j ** 2) < planes[k + 1]:
                row.append(k * 3)  # <- Arbitrary number to adjust color
                text_row.append('Region {}'.format(k + 2))
    regions.append(row)
    hover.append(text_row)


# indices = np.where(np.array(hover) == "Region 1")
# for a in range(len(indices[0])):
#     hover[indices[0][a]][indices[1][a]] = ("New Region")

click_x = np.random.uniform(-planes[-1], planes[-1])
click_y = np.random.uniform(-planes[-1], planes[-1])

# Change graph on Click TODO: Not filling region correctly (MUST FIX)
if np.sqrt(click_x ** 2 + click_y ** 2) < planes[0]:
    print('1', True)
    for row_ in hover:
        for text in row_:
            print(text)
            text.replace('Region 1', 'New Region')

if np.sqrt(click_x ** 2 + click_y ** 2) > planes[-1]:
    print('2', True)
    for row_ in hover:
        for text in row_:
            print(text)
            text.replace('Region {}'.format(len(planes)+1), 'Newer Region')

for k in range(len(planes) - 1):
    if planes[k] < np.sqrt(click_x ** 2 + click_y ** 2) < planes[k + 1]:
        print('3', True)
        for row_ in hover:
            for text in row_:
                print(text)
                text.replace('Region {}'.format(k+2), 'Newest Region')

print(hover)

1 个答案:

答案 0 :(得分:0)

python中的字符串是不可变的。这意味着它们不能被编辑,只能被替换。

x = "silly sam"    
x.replace("silly", "smart") 

x仍为"silly sam",因为字符串的替换版本未分配给变量,因此被丢弃。

x = "silly sam"
x = x.replace("silly", "smart")

现在x的值为"smart"