python错误:';浮动';对象是不可编辑的

python错误:';浮动';对象是不可编辑的,python,python-3.x,Python,Python 3.x,我尝试从一个txt文件的向量列表中进行3个切片,共2列,使用条件来分隔RGB 但当我运行程序时,出现以下错误:“'float'对象不可编辑”。有人能帮我吗 #File opening arq = open('arquivo.txt','r') lines = arq.readlines() arq.close() vetor_x = [] vetor_y = [] lista_geral = [] for line in lines: line = line.replace('\n

我尝试从一个txt文件的向量列表中进行3个切片,共2列,使用条件来分隔RGB

但当我运行程序时,出现以下错误:“'float'对象不可编辑”。有人能帮我吗

#File opening
arq = open('arquivo.txt','r')

lines = arq.readlines()
arq.close()

vetor_x = []
vetor_y = []
lista_geral = []

for line in lines:
    line = line.replace('\n','')
    line = line.strip()
    line = line.replace(',','.')
    line = line.split('\t')

    if(len(line) == 2):
        X = line[0]
        Y = line[1]
        vetor_x.append(float(X))
        vetor_y.append(float(Y))
        lista_geral.append([X,Y])

#Conditions
B = 0
G = 0
R = 0

for i in range(0,len(vetor_x)):

    if vetor_x[i] <= 500:
        vetor_xB[B] = list(vetor_x[i])
        vetor_yB[B] = list(vetor_y[i])
        B += 1

    elif vetor_x[i] <= 600:
        vetor_xG[G] = list(vetor_x[i])
        vetor_yG[G] = list(vetor_y[i])
        G += 1

    elif vetor_x[i] <= 700:
        vetor_xR[R] = list(vetor_x[i])
        vetor_yR[R] = list(vetor_y[i])
        R += 1

print('####### vetor_xB #######')
print(vetor_xB)
print('####### vetor_yB #######')
print(vetor_yB)
print('####### vetor_xG #######')
print(vetor_xG)
print('####### vetor_yG #######')
print(vetor_yG)
print('####### vetor_xR #######')
print(vetor_xR)
print('####### vetor_yR #######')
print(vetor_yR)
#文件打开
arq=open('arquivo.txt','r')
lines=arq.readlines()
arq.close()
vetor_x=[]
vetor_y=[]
lista_geral=[]
对于行中的行:
行=行。替换('\n','')
line=line.strip()
行=行。替换('、'、'。)
line=line.split('\t')
如果(len(line)==2):
X=第[0]行
Y=第[1]行
附加(浮动(x))
附加(浮动(y))
lista_geral.append([X,Y])
#条件
B=0
G=0
R=0
对于范围(0,len(vetor_x))中的i:
如果本规范中的vetor_x[i]

if vetor_x[i] <= 500:
    vetor_xB[B] = list(vetor_x[i])
…但这只是一个猜测

不能通过将值分配给不存在的元素来延长Python列表的长度。因此,如果
vetor\u xB
是一个空列表,那么分配
vetor\u xB[B]=
将失败,因为无论
B
的值如何,都没有元素
B
:如果
B==0
,那么
vetor\u xB[B]
vetor\u xB[0]
相同,尝试赋值将失败,因为没有元素零

因此,要使列表更长,请改用
append()
。但要附加到列表,列表必须首先存在。您的代码没有为
vetor\xB
提供起始值。在程序的顶部需要类似于
vetor\u xB==[]
的内容

在这段代码中

if vetor_x[i] <= 500:
    vetor_xB[B] = list(vetor_x[i])
…但这只是一个猜测

不能通过将值分配给不存在的元素来延长Python列表的长度。因此,如果
vetor\u xB
是一个空列表,那么分配
vetor\u xB[B]=
将失败,因为无论
B
的值如何,都没有元素
B
:如果
B==0
,那么
vetor\u xB[B]
vetor\u xB[0]
相同,尝试赋值将失败,因为没有元素零


因此,要使列表更长,请改用
append()
。但要附加到列表,列表必须首先存在。您的代码没有为
vetor\xB
提供起始值。在程序的顶部需要类似于
vetor\u xB==[]
的内容

该错误意味着此行
vetor\u xB[B]=list(vetor\u x[i])
无法将
浮点值转换为列表,相反,您可能只想将
浮点值添加到列表中,但我们需要先定义这些列表,然后才能使用它们,如下所示:

# Define the lists we want to append the data to
vetor_xB = []
vetor_yB = []
vetor_xG = []
vetor_yG = []
vetor_xR = []
vetor_yR = []

for i in range(len(vetor_x)):
    if vetor_x[i] <= 500:
        vetor_xB.append(vetor_x[i])
        vetor_yB.append(vetor_y[i])

    elif vetor_x[i] <= 600:
        vetor_xG.append(vetor_x[i])
        vetor_yG.append(vetor_y[i])

    elif vetor_x[i] <= 700:
        vetor_xR.append(vetor_x[i])
        vetor_yR.append(vetor_y[i])
注: 可以简化读取文件的格式,替换所有这些:

for line in lines:
    line = line.replace('\n','')
    line = line.strip()
    line = line.replace(',','.')
    line = line.split('\t')
只有这三行:

for line in lines:
    line = line.replace(',','.')
    line = line.strip().split()

该错误意味着此行
vetor_xB[B]=list(vetor_x[i])
无法将
浮点值转换为列表,相反,您可能只想将
浮点值附加到列表中,但我们需要先定义这些列表,然后才能使用它们,如下所示:

# Define the lists we want to append the data to
vetor_xB = []
vetor_yB = []
vetor_xG = []
vetor_yG = []
vetor_xR = []
vetor_yR = []

for i in range(len(vetor_x)):
    if vetor_x[i] <= 500:
        vetor_xB.append(vetor_x[i])
        vetor_yB.append(vetor_y[i])

    elif vetor_x[i] <= 600:
        vetor_xG.append(vetor_x[i])
        vetor_yG.append(vetor_y[i])

    elif vetor_x[i] <= 700:
        vetor_xR.append(vetor_x[i])
        vetor_yR.append(vetor_y[i])
注: 可以简化读取文件的格式,替换所有这些:

for line in lines:
    line = line.replace('\n','')
    line = line.strip()
    line = line.replace(',','.')
    line = line.split('\t')
只有这三行:

for line in lines:
    line = line.replace(',','.')
    line = line.strip().split()

当您在第6行中定义它时,
vetor_x
绝对是可编辑的。这使得
vetor_xB
成为错误的来源。我看不到它在任何地方被定义

通过使用
vetor_xB
,您可以将其定义为循环前的某个地方的字典,并调用
vetor_xB.values()
,以输出所需列表

或者(最好)您可以将
vetorxb
定义为一个列表,而不是
vetorxb[B]
您可以编写
vetorxb.append(B)
。这似乎是更简单、更符合逻辑的解决方案

更可取的是使用熊猫,如下所示。这是一个更快、更高效的解决方案,而且确实省去了手动解析数据所需的大量时间。在这里,整个文档被替换为6行代码+一些打印语句。它可能不是内存效率最高的,但它提供了一些我认为值得切换的显著优势

df = pd.read_csv(archive_path, sep='   ', header=None)

for col in df.columns: df[col] = pd.to_numeric(df[col].str.replace(',','.'))

df.columns = ['X', 'Y']

vetores = {}
vetores['vetor_B'] = df.loc[df['X']<=500]
vetores['vetor_G'] = df.loc[(df['X']>500) & df['X']<=600]
vetores['vetor_R'] = df.loc[(df['X']>600) & df['X']<=700]

for vetor in vetores.keys():
    print(vetor+'X:')
    print(vetores[vetor]['X'])
    print(vetor+'Y:')
    print(vetores[vetor]['Y'])
    print('-'*40)
df=pd.read\u csv(存档路径,sep='',header=None)
对于df.columns中的col:df[col]=pd.to_numeric(df[col].str.replace(',','))
df.columns=['X','Y']
维托雷斯={}

vetores['vetor_B']=df.loc[df['X']500)&df['X']600)&df['X']
vetor_X
在第6行中定义它时,它肯定是可以使用的。这使得
vetor_xB
成为错误的来源。我看不到它在任何地方定义过

通过使用
vetor_xB
,您可以将其定义为循环前的某个地方的字典,并调用
vetor_xB.values()
,以输出所需列表

或者(最好)您可以将
vetor\u xB
定义为一个列表,而不是
vetor\u xB[B]
您可以编写
vetor\u xB.append(B)
。这似乎是更简单、更符合逻辑的解决方案

更可取的做法是使用pandas,如下所示。这是一个更快、更高效的解决方案,而且确实省去了手动解析数据所需的大量时间。在这里,整个文档被替换为6行代码+一些打印语句。它可能不是内存效率最高的,但它提供了一些我认为非常重要的优势他值得交换

df = pd.read_csv(archive_path, sep='   ', header=None)

for col in df.columns: df[col] = pd.to_numeric(df[col].str.replace(',','.'))

df.columns = ['X', 'Y']

vetores = {}
vetores['vetor_B'] = df.loc[df['X']<=500]
vetores['vetor_G'] = df.loc[(df['X']>500) & df['X']<=600]
vetores['vetor_R'] = df.loc[(df['X']>600) & df['X']<=700]

for vetor in vetores.keys():
    print(vetor+'X:')
    print(vetores[vetor]['X'])
    print(vetor+'Y:')
    print(vetores[vetor]['Y'])
    print('-'*40)
df=pd.read\u csv(存档路径,sep='',header=None)
对于df.columns中的col:df[col]=pd.to_numeric(df[col].str.replace(',','))
df.columns=['X','Y']
维托雷斯={}
vetores['vetor_B']=df.loc[df['X']500)&df['X']600)&df['X']
vetor_xB[B]=list(vetor_X[i])
您试图键入一个
vetor_X
的值。显然这是一个浮点数。
vetor_xB]=list(vetor_X[i
您试图键入一个
vetor_X
的值,显然是一个浮点数。