小编feg*_*ege的帖子

Python连接组件

我正在get_connected_components为一个类写一个函数Graph:

def get_connected_components(self):
    path=[]
    for i in self.graph.keys():
        q=self.graph[i]
        while q:
            print(q)
            v=q.pop(0)
            if not v in path:
                path=path+[v]
    return path
Run Code Online (Sandbox Code Playgroud)

我的图是:

{0: [(0, 1), (0, 2), (0, 3)], 1: [], 2: [(2, 1)], 3: [(3, 4), (3, 5)], \
4: [(4, 3), (4, 5)], 5: [(5, 3), (5, 4), (5, 7)], 6: [(6, 8)], 7: [], \
8: [(8, 9)], 9: []}
Run Code Online (Sandbox Code Playgroud)

其中键是节点,值是边缘.我的函数给了我这个连接组件:

[(0, 1), (0, 2), (0, 3), (2, 1), (3, 4), (3, 5), …
Run Code Online (Sandbox Code Playgroud)

python graph-algorithm connected-components

7
推荐指数
3
解决办法
2万
查看次数

使用装饰器动态地向类添加方法

我会添加方法class动态...函数名称也将动态传递.

我能怎么做?我试过这种方式

def decor(*var):
  def onDecorator(aClass):
    class onInstance:
        def __init__(self,*args,**kargs):
            setter=var
            aClass.setter = self.flam
            self.wrapped = aClass(*args,**kargs)

        def __getattr__(self,attr):
            return getattr(self.wrapped,attr)

        def __setattr__(self,attr,value):
            if attr == 'wrapped':
                self.__dict__[attr]=value
            else:
                setattr(self.wrapped,attr,value)

        def flam(self,*args):
            self.__setattr__('dimension',len(args[0]))

    return onInstance
return onDecorator
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

print(aClass.__dict__)
Run Code Online (Sandbox Code Playgroud)

我有

'setter': <bound method onInstance.flam of <__main__.onInstance object at 0x522270>>
Run Code Online (Sandbox Code Playgroud)

而不是var:.....

我有这堂课:

class D:
  def __init__(self, data):
    self.data = data
    self.dimension = len(self.data)
Run Code Online (Sandbox Code Playgroud)

我打电话给:

D.name()
Run Code Online (Sandbox Code Playgroud)

并且已经回来self.dimension但我name事先并不知道

python methods decorator

6
推荐指数
2
解决办法
4826
查看次数

Python中列表中最长的元素链

我有一份国家名单,我希望拥有最长的国家道路,每个国家的选择必须以结束前一个元素的相同字母开头

nations = ['albania','andorra','austria','belarus','belgium','bosnia and herzegovina',
      'bulgaria','croatia','czech republic','denmark','estonia',  
      'finland','france','germany','greece','hungary',
      'iceland','ireland','italy','latvia','liechtenstein','lithuania','luxembourg',
      'macedonia','malta','moldova','monaco','montenegro','netherlands', 
      'norway','poland','portugal','romania','russia',  
      'san marino','serbia','slovakia','slovenia','spain','sweden', 'switzerland',
      'ukraine','united kingdom','vatican city'] 

chain('spain')
>>>['spain', 'netherlands', 'slovenia', 'andorra', 'austria', 'albania']
Run Code Online (Sandbox Code Playgroud)

我试过这种方式,但它不起作用

def chain(naz):
    initial = naz[-1]
    initials=[]
    res = set()
    res.add(naz)
    for i in nations:
        if i.startswith(initial):
            initials.append(i)
    for j in initials:
        nations.remove(j)
        res.add(j)
        chain(j)
    return res
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

python longest-path

6
推荐指数
2
解决办法
2763
查看次数

如何在python中重新定义=?

当我使用时,我想知道Python调用了什么=:

a = b
Run Code Online (Sandbox Code Playgroud)

我在哪里查找这些信息?

我会用my ="赋值给变量"

a会有类似的行为

l=list()  
l.append(1)  
l.append(2)  
l.append(3)  
l1=l  
l1[2] = ’B’  
print(l1)  
[1, 2, ’B’]  
print(l)  
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

python methods operator-overloading operators redefine

3
推荐指数
3
解决办法
875
查看次数

Python:元组的最后一个元素

我会孤立一个元组的最后一个元素

a = (3,5,5)
last = a[-1]
Run Code Online (Sandbox Code Playgroud)

但问题是我有一个像这样的pice ok代码

if var == last:
  do something
Run Code Online (Sandbox Code Playgroud)

它需要第一个5而不是第二个,我怎么能采取最后一个?

python tuples

2
推荐指数
1
解决办法
2万
查看次数

Python多个交集

我重新实现了python中的set但是我遇到了多个交集的问题....我遵循了学习Python这本书,但我的代码有问题

class Set:
    def __init__(self,value=[]):
        self.data = []
        self.remDupli(value)

    def remDupli(self,val):
        for i in val:
            if i not in self.data:
                self.data.append(i)

    def intersect(self,other):
        val=[]
        for i in self.data:
            for k in other:
                if i == k:
                    val.append(i)
        return Set(val)

    def union(self,other):
        val=self.data
        for i in other:
            if i not in self.data:
                val.append(i)
        return Set(val)

    def __or__(self,a):       return self.union(a)
    def __and__(self,a):      return self.intersect(a)
    def __len__(self):        return len(self.data)
    def __getitem__(self,key):  return self.data[key]
    def __repr__(self):       return 'Set: ' +repr(self.data)

class Extend(Set):
    def intersect(self, …
Run Code Online (Sandbox Code Playgroud)

python intersection set

1
推荐指数
1
解决办法
619
查看次数