C# 数组PYTHON中的索引器
我正试图用Python编写这个C#函数,不幸的是我有一个错误:C# 数组PYTHON中的索引器,c#,python,arrays,function,python-3.x,C#,Python,Arrays,Function,Python 3.x,我正试图用Python编写这个C#函数,不幸的是我有一个错误:索引器:在Population.BinaryX.insert([I][j],dec)行中列出分配索引超出范围。谁能告诉我如何解决这个问题?!我怎么了 C#代码: public class Population { public float[] CodedX = new float[20]; public float[,] BinaryX = new float[10, 8]; } pr
索引器:在Population.BinaryX.insert([I][j],dec)
行中列出分配索引超出范围。谁能告诉我如何解决这个问题?!我怎么了
C#代码:
public class Population
{
public float[] CodedX = new float[20];
public float[,] BinaryX = new float[10, 8];
}
private void BinaryTranslating()
{
int dec;
int j = 0;
for (var i = 0; i < 10; i++)
{
while (Population.CodedX[i] > 1 & j < 8)
{
dec = (int)Population.CodedX[i] % 2;
Population.BinaryX[i, j] = dec;
Population.CodedX[i] /= 2;
j++;
}
j = 0;
}
}
private void DecimalTranslating()
{
for (var i = 0; i < 10; i++)
{
Population.CodedX[i] = Population.BinaryX[i, 7] * 128 + Population.BinaryX[i, 6] * 64 +
Population.BinaryX[i, 5] * 32 + Population.BinaryX[i, 4] * 16 +
Population.BinaryX[i, 3] * 8 + Population.BinaryX[i, 2] * 4 +
Population.BinaryX[i, 1] * 2 + Population.BinaryX[i, 0];
}
}
class Population:
CodedX = []
BinaryX = [[], []]
class Application:
@staticmethod
def binary_translating():
j = 0
for i in range(10):
while Population.CodedX[i] > 1 & j < 8:
dec = int(Population.CodedX[i]) % 2
Population.BinaryX.insert([i][j], dec)
Population.CodedX[i] /= 2
j += 1
j = 0
@staticmethod
def decimal_translating():
for i in range(10):
new_item = Population.BinaryX[i][7] * 128 + Population.BinaryX[i][6] * 64 + Population.BinaryX[i][5] * 32 +\
Population.BinaryX[i][4] * 16 + Population.BinaryX[i][3] * 8 + Population.BinaryX[i][2] * 4 +\
Population.BinaryX[i][1] * 2 + Population.BinaryX[i][0]
Population.CodedX.insert(i, new_item)
公共类人口
{
公共浮动[]CodedX=新浮动[20];
公共浮点数[,]BinaryX=新浮点数[10,8];
}
私有void二进制翻译()
{
国际数据中心;
int j=0;
对于(变量i=0;i<10;i++)
{
while(Population.CodedX[i]>1&j<8)
{
dec=(int)总体.CodedX[i]%2;
人口.BinaryX[i,j]=dec;
人口.CodedX[i]/=2;
j++;
}
j=0;
}
}
私有无效数据转换()
{
对于(变量i=0;i<10;i++)
{
Population.CodedX[i]=Population.BinaryX[i,7]*128+Population.BinaryX[i,6]*64+
人口.BinaryX[i,5]*32+人口.BinaryX[i,4]*16+
人口.BinaryX[i,3]*8+人口.BinaryX[i,2]*4+
人口.BinaryX[i,1]*2+人口.BinaryX[i,0];
}
}
Python代码:
public class Population
{
public float[] CodedX = new float[20];
public float[,] BinaryX = new float[10, 8];
}
private void BinaryTranslating()
{
int dec;
int j = 0;
for (var i = 0; i < 10; i++)
{
while (Population.CodedX[i] > 1 & j < 8)
{
dec = (int)Population.CodedX[i] % 2;
Population.BinaryX[i, j] = dec;
Population.CodedX[i] /= 2;
j++;
}
j = 0;
}
}
private void DecimalTranslating()
{
for (var i = 0; i < 10; i++)
{
Population.CodedX[i] = Population.BinaryX[i, 7] * 128 + Population.BinaryX[i, 6] * 64 +
Population.BinaryX[i, 5] * 32 + Population.BinaryX[i, 4] * 16 +
Population.BinaryX[i, 3] * 8 + Population.BinaryX[i, 2] * 4 +
Population.BinaryX[i, 1] * 2 + Population.BinaryX[i, 0];
}
}
class Population:
CodedX = []
BinaryX = [[], []]
class Application:
@staticmethod
def binary_translating():
j = 0
for i in range(10):
while Population.CodedX[i] > 1 & j < 8:
dec = int(Population.CodedX[i]) % 2
Population.BinaryX.insert([i][j], dec)
Population.CodedX[i] /= 2
j += 1
j = 0
@staticmethod
def decimal_translating():
for i in range(10):
new_item = Population.BinaryX[i][7] * 128 + Population.BinaryX[i][6] * 64 + Population.BinaryX[i][5] * 32 +\
Population.BinaryX[i][4] * 16 + Population.BinaryX[i][3] * 8 + Population.BinaryX[i][2] * 4 +\
Population.BinaryX[i][1] * 2 + Population.BinaryX[i][0]
Population.CodedX.insert(i, new_item)
班级人数:
CodedX=[]
BinaryX=[],[]
班级申请:
@静力学方法
def binary_translating():
j=0
对于范围(10)内的i:
而人口.CodedX[i]>1&j<8:
dec=int(总体代码dx[i])%2
Population.BinaryX.insert([i][j],12月)
人口.CodedX[i]/=2
j+=1
j=0
@静力学方法
def decimal_translating():
对于范围(10)内的i:
新项目=人口.BinaryX[i][7]*128+人口.BinaryX[i][6]*64+人口.BinaryX[i][5]*32+\
人口.BinaryX[i][4]*16+人口.BinaryX[i][3]*8+人口.BinaryX[i][2]*4+\
Population.BinaryX[i][1]*2+Population.BinaryX[i][0]
填充.CodedX.insert(i,新项目)
考虑Population.BinaryX.insert([i][j],dec)
中的[i][j]
表达式。该表达式创建一个包含i
值的1项列表,然后尝试从该列表中获取j
第项
>>> i=1
>>> j=2
>>> [i][j]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
另一个选项是在子列表中插入:
@staticmethod
def binary_translating():
Population.BinaryX = []
j = 0
for i in range(10):
Population.BinaryX.insert([])
while Population.CodedX[i] > 1 & j < 8:
dec = int(Population.CodedX[i]) % 2
Population.BinaryX[i].insert(j, dec)
Population.CodedX[i] /= 2
j += 1
j = 0
@staticmethod
def binary_translating():
Population.BinaryX=[]
j=0
对于范围(10)内的i:
Population.BinaryX.insert([])
而人口.CodedX[i]>1&j<8:
dec=int(总体代码dx[i])%2
Population.BinaryX[i].插入(j,dec)
人口.CodedX[i]/=2
j+=1
j=0
考虑Population.BinaryX.insert([i][j],dec)
中的[i][j]
表达式。该表达式创建一个包含i
值的1项列表,然后尝试从该列表中获取j
第项
>>> i=1
>>> j=2
>>> [i][j]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
另一个选项是在子列表中插入:
@staticmethod
def binary_translating():
Population.BinaryX = []
j = 0
for i in range(10):
Population.BinaryX.insert([])
while Population.CodedX[i] > 1 & j < 8:
dec = int(Population.CodedX[i]) % 2
Population.BinaryX[i].insert(j, dec)
Population.CodedX[i] /= 2
j += 1
j = 0
@staticmethod
def binary_translating():
Population.BinaryX=[]
j=0
对于范围(10)内的i:
Population.BinaryX.insert([])
而人口.CodedX[i]>1&j<8:
dec=int(总体代码dx[i])%2
Population.BinaryX[i].插入(j,dec)
人口.CodedX[i]/=2
j+=1
j=0
请确保Population.BinaryX
是一个有效的实体,并且其中至少包含10个元素,因为您正在运行循环10次。这同样适用于CodedX
如果其中任何一个都没有至少10个元素,那么您将得到
索引器:列表分配索引超出范围
试试
这是tdelaney提到的预分配
如果您查看应用程序类中的每个函数,它们尝试使用BinaryX或CodedX数组,但是如果这些数组中没有任何元素,那么python将如何索引到它们中
我的意思是在调用decimal\u translating()
函数之前,Population.BinrayX
必须包含元素。它不能是空数组
类似地,在调用binary\u translating()
函数之前,Population.CodedX
必须包含元素
[编辑#1]
在您的评论之后,并尝试理解您的代码。以下是我所拥有的:-
class Population(object):
def __init__(self):
self.CodedX = [0 for i in range(10)] # as per your C# code
self.BinaryX = []
# debug code to fill CodedX array - remove it
for i in range(10):
self.CodedX[i] = int(761)
def binary_translating(self):
for i in range(10):
j = 0
self.BinaryX.append([0 for k in range(10)])
while (self.CodedX[i] > 0) and (j < 10):
dec = int(self.CodedX[i] % 2)
self.BinaryX[i][j] = dec # this will append at j
self.CodedX[i] = int(self.CodedX[i] / 2)
j += 1
# debug code to print - remove it
print(self.BinaryX)
# debug code to clear CodedX - remove it
for i in range(10):
self.CodedX[i] = int(0)
def decimal_translating(self):
for i in range(10):
value = self.BinaryX[i][7] * 128 + self.BinaryX[i][6] * 64 + self.BinaryX[i][5] * 32 + \
self.BinaryX[i][4] * 16 + self.BinaryX[i][3] * 8 + self.BinaryX[i][2] * 4 + \
self.BinaryX[i][1] * 2 + self.BinaryX[i][0]
self.CodedX[i] = value
print(self.CodedX)
pop = Population()
pop.binary_translating()
pop.decimal_translating()
[编辑#2]请确保填充.BinaryX
是一个有效的实体,其中至少包含10个元素,因为您正在运行循环10次。这同样适用于CodedX
如果其中任何一个都没有至少10个元素,那么您将得到
索引器:列表分配索引超出范围
试试
这是tdelaney提到的预分配
如果您查看应用程序类中的每个函数,它们尝试使用BinaryX或CodedX数组,但是如果这些数组中没有任何元素,那么python将如何索引到它们中
我的意思是在调用decimal\u translating()
函数之前,Population.BinrayX
必须包含元素。它不能是空数组
类似地,在调用binary\u translating()
函数之前,Population.CodedX
必须包含元素
[编辑#1]
在您的评论之后,并尝试理解您的代码。以下是我所拥有的:-
class Population(object):
def __init__(self):
self.CodedX = [0 for i in range(10)] # as per your C# code
self.BinaryX = []
# debug code to fill CodedX array - remove it
for i in range(10):
self.CodedX[i] = int(761)
def binary_translating(self):
for i in range(10):
j = 0
self.BinaryX.append([0 for k in range(10)])
while (self.CodedX[i] > 0) and (j < 10):
dec = int(self.CodedX[i] % 2)
self.BinaryX[i][j] = dec # this will append at j
self.CodedX[i] = int(self.CodedX[i] / 2)
j += 1
# debug code to print - remove it
print(self.BinaryX)
# debug code to clear CodedX - remove it
for i in range(10):
self.CodedX[i] = int(0)
def decimal_translating(self):
for i in range(10):
value = self.BinaryX[i][7] * 128 + self.BinaryX[i][6] * 64 + self.BinaryX[i][5] * 32 + \
self.BinaryX[i][4] * 16 + self.BinaryX[i][3] * 8 + self.BinaryX[i][2] * 4 + \
self.BinaryX[i][1] * 2 + self.BinaryX[i][0]
self.CodedX[i] = value
print(self.CodedX)
pop = Population()
pop.binary_translating()
pop.decimal_translating()
[edit#2]您不应该使用逐位运算符,对于布尔值,请使用Python中适当的“AND”运算符。您能告诉我们如何定义填充.BinaryX
?您能发布CodedX的示例吗