Python 3.7 如何将此代码翻译成python 3?
这段代码最初是用Python2编写的,我需要用Python3翻译它! 很抱歉,我没有分享足够的信息: 另外,这里是第一次分配Python 3.7 如何将此代码翻译成python 3?,python-3.7,Python 3.7,这段代码最初是用Python2编写的,我需要用Python3翻译它! 很抱歉,我没有分享足够的信息: 另外,这里是第一次分配self.D的部分: def __init__(self,instance,transformed,describe1,describe2): self.D=[] self.instance=instance self.transformed=transformed self.describe1,sel
self.D
的部分:
def __init__(self,instance,transformed,describe1,describe2):
self.D=[]
self.instance=instance
self.transformed=transformed
self.describe1,self.describe2=describe1,describe2
self.describe=self.describe1+', '+self.describe2 if self.describe2 else self.describe1
self.column_num=self.tuple_num=self.view_num=0
self.names=[]
self.types=[]
self.origins=[]
self.features=[]
self.views=[]
self.classify_id=-1
self.classify_num = 1
self.classes=[]
def generateViews(self):
T=map(list,zip(*self.D))
if self.transformed==0:
s= int( self.column_num)
for column_id in range(s):
f = Features(self.names[column_id],self.types[column_id],self.origins[column_id])
#calculate min,max for numerical,temporal
if f.type==Type.numerical or f.type==Type.temporal:
f.min,f.max=min(T[column_id]),max(T[column_id])
if f.min==f.max:
self.types[column_id]=f.type=Type.none
self.features.append(f)
continue
d={}
#calculate distinct,ratio for categorical,temporal
if f.type == Type.categorical or f.type == Type.temporal:
for i in range(self.tuple_num):
print([type(self.D[i]) for i in range(self.tuple_num)])
if self.D[i][column_id] in d:
d[self.D[i][column_id]]+=1
else:
d[self.D[i][column_id]]=1
f.distinct = len(d)
f.ratio = 1.0 * f.distinct / self.tuple_num
f.distinct_values=[(k,d[k]) for k in sorted(d)]
if f.type==Type.temporal:
self.getIntervalBins(f)
self.features.append(f)
TypeError:“map”对象不可下标您提供的代码段不足以解决此问题。问题在于您正试图使用
self.D[i]
为其下标的self.D
。请查看实例化了self.D
的代码,确保它是一个类似数组的变量,以便您可以为其下标
编辑
根据您的编辑,请确认self.D[i]
是否也是代码中提到的范围内所有i
的数组。你可以通过简单的方法做到这一点
print([type(self.D[i]) for i in range(self.tuple_num))
共享此代码的响应,以便我可以进一步提供帮助
编辑-2
根据您的评论和编辑的代码片段,似乎self.D
是一些map
函数的输出。在python 2中,map
是一个返回列表的函数。然而,在python3map
中,是一个类,当调用它时,会创建一个map对象
解决此问题的最简单方法是找出self.D
第一次分配的行,以及RHS中的任何代码,用列表(…)
函数将其包装起来
或者,就在这一行之后
T=map(list,zip(*self.D))
添加以下内容
self.D = list(self.D)
希望这能解决这个问题我们没有足够的信息来回答这个问题,但是在Python3中,生成器和映射对象是不可下标的。我想可能在你的房间里
self.D[i]
变量,因为您声称self.D
是一个列表,但有可能self.D[i]
是一个映射对象
在您的情况下,要访问索引,可以将其转换为列表:
list(self.D)[i]
或者使用解包隐式转换为列表(这可能更精简,但请记住显式优于隐式):
TypeError:“映射”对象不可下标。这是否意味着
self.D
是一个映射对象?在这种情况下,self.D
绝对不是您声称的列表。检查isinstance(self.D,list)
或简单地输入type(self.D)
以检查它打印的变量类型False
,这意味着您的self.D不是列表。我打赌它是一个地图对象。我需要更多的代码才能完全调试它。我已经编辑了我的问题,希望我现在提供了足够的信息!是的,它是一个地图对象。我错了
[*self.D[i]]