关于SCI2的那个python脚本的纠结。

2018年5月18日纠结了加起来快四个小时。。具体如下:

'''这个代码就是我突然对于SCI2里面GUESS可视化的python代码有点小疑问,后来解决了。它那个是基于python2
写的,里面还有cmp这个函数,而python3就没有这个方法了,换成了用key进行排序。前面部分创立类是从百度知道上
复制的,意思就是为了说明SCI2里面那个py脚本里n1.number_of_work和n2.number_of_work是属于创建了自定义的类,然后
这个number_of_work是类的一个属性,存进g.node[:]列表里的是这个类的实例,实例也是可以存进列表的。不过目前有一个问题,
这个问题还是不知道答案,就是g.node[:]这样的方法,我试的时候报错的,报的错是Typeerror:unhashable object ‘slice’
,就是说切片是不可哈希的。按照networkx里面的说明用list(G.nodes)和list(G.nodes(data=True))也只能获取到一个各节点的
序号的列表,获取到的这个列表中用索引取出来的东西也只是一个数字,没有任何的节点属性。后来还是试了一下,用G.nodes和
G.nodes(data=True)都是没用,因为得到的对象的type是属于什么networkx里的Nodeview,不是list这个类。用最简单的构建空列表,
然后从G.nodes(data=True)里一个个弄出来往空列表里添就可以获得完整的原来的节点信息,获得这些节点组成的列表。但是还是不懂
SCI2里为什么可以直接用g.nodes[:]和专业昂简便的表达就达到目的,也许是python2的原因,但是正常的列表,python3也可以用[:]来
获得副本。。不懂
此外,和SCI2里的py脚本一致的python2代码如下:
#升序排列
numbers = [5,2,9,7]
def mycmp1(x,y):
return x-y
numbers.sort(cmp = mycmp1)
print numbers

>>>
[2, 5, 7, 9]

#降序排列
numbers = [5,2,9,7]
def mycmp2(x,y):
return y-x
numbers.sort(cmp = mycmp2)
print numbers

>>>
[9,7,5,2]
当然,也可以写作numbers.sort(mycmp1),省略cmp--最重要的就是这句话'''

class Team: # #类的定义
team_name = ""
team_years = 0

def __init__(self, name, team_years):
self.team_name = name
self.team_years = team_years
self.wlp = []

def addWLP(self, x): #定义类方法,不过这个方法没用到,就算注释这两句也没事
self.wlp.append(x)
class teacher(Team):#子类引用
def __init__(self,name,team_years,salary):#自己的方法添加额外元素
Team.__init__(self,name,team_years)#此方法里要加入父类方法的引用,很关键的一步
self.salary=salary#添加具体内容
print('initialized teacher is %s' % self.team_name)
print('Salary is %d'%self.salary)


_l = [] ## 定义空列表
_m = [] ## 定义子类列表
for i in range(19):
_d = Team("name"+str(i), i) #生成类的实例
_c = teacher("name"+str(i),i,i*1000)
_l.append(_d)##每个实例为一个列表元素,挂在最后面
_m.append(_c)
print(_l)

_l.sort(key = lambda x:x.team_years,reverse=True)#这就是用key构造排序的语句
for j in _l:
print(j.team_years) #这句话就是调用了自定义的Team类的team_years属性,输出的结果是18,17.....0,这种调用就和SCI2里面的那个py脚本里的一个性质
#print(j)

猜你喜欢

转载自www.cnblogs.com/liuqiang8650/p/9056873.html
sci