这段代码最初是用Python 2编写的,我需要将其翻译成python 3!
很抱歉没有分享足够的信息:
另外,这是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:“地图”对象不可下标
答案 0 :(得分:0)
您提供的代码片段不足以解决问题。问题出在self.D
上,您正尝试使用self.D[i]
下标。请查看实例化self.D
的代码,并确保它是一个类似于数组的变量,以便您可以对其下标。
根据您的编辑,请确认代码中提到的范围内的所有self.D[i]
的{{1}}是否也类似于数组。您可以简单地做到这一点
i
分享此代码的响应,以便我进一步帮助。
根据您的注释和经过编辑的代码段,似乎print([type(self.D[i]) for i in range(self.tuple_num))
是某些self.D
函数的输出。在python 2中,map
是一个返回列表的函数。但是,在python3中,map
是一个类,在调用该类时会创建一个地图对象。
解决此问题的最简单方法是找出首先分配map
的行,无论RHS中包含什么代码,请使用self.D
函数包装它。
或者,在此行之后
list(...)
添加以下内容
T=map(list,zip(*self.D))
希望这可以解决问题
答案 1 :(得分:0)
我们没有足够的信息来回答这个问题,但是在Python 3中,生成器和映射对象不可下标。我想可能是您的
val mSectionsPagerAdapter = SectionsPagerAdapter(supportFragmentManager)
vp!!.adapter = mSectionsPagerAdapter
vp!!.addOnPageChangeListener(object: ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(position: Int) {
when (position) {
0 -> supportActionBar!!.title = "Page 1"
1 -> supportActionBar!!.title = "Page 2"
2 -> supportActionBar!!.title = "Page 3"
3 -> supportActionBar!!.title = "Page 4"
}
}
})
tabLayout.setupWithViewPager(vp)
变量,因为您声称self.D[i]
是列表,但是self.D
可能是地图对象。
对于您而言,要访问索引,可以将其转换为列表:
self.D[i]
或使用解压缩将其隐式转换为列表(这可能更简洁,但请记住,显式比隐式更好):
list(self.D)[i]